Mysql
 sql >> база данни >  >> RDS >> Mysql

Как mysql дефинира DISTINCT() в справочната документация

За пълнота отговарям на моето и се свързвам с друг въпрос Изглежда, че това поведение е пряко следствие от стандарта на SQL, позволяващ празно пространство между функцията и скоби.

Тъй като (обикновено) е позволено да се казва FUNCTION_NAME (x), тогава, когато тази функция се приложи към първия член на select

SELECT FUNCTION_NAME (x)

тогава анализаторът ще има трудно време да установи дали това е контекст на име на функция или SELECT модифицираща ключова дума.

Така че в горния случай FUNCTION_NAME всъщност е FUNCTION_NAME_OR_KEYWORD за анализатора.

Но това отива по-далеч:тъй като пространството между името на функцията и скобата Е разрешено, анализаторът всъщност НЕ може да прави разлика между

SELECT FUNCTION_NAME_OR_KEYWORD (x)

и

SELECT FUNCTION_NAME_OR_KEYWORD(x)

(трябва да тества ключовите думи, за да види дали са функции) и тъй като (x) ще бъде анализирано до x, следва, че за FUNCTION_NAME_OR_KEYWORD -> DISTINCT (и всички други модифициращи ключови думи SELECT) няма разлика между

SELECT DISTINCT x, y, z, ...

и

SELECT DISTINCT(x), y, z, ...

QED, но без твърди препратки (предположение, че стандарт не се интересува от пробелите между имената на функциите и скоби според мен е оправдано, но не успях да следвам граматиката на BNF до степен, че да мога да цитирам точното правило).

ЗАБЕЛЕЖКА:mysql има определен брой функции, при които се грижи за интервал между функциите и скоби, но вярвам, че това са изключения (следователно опцията на сървъра да го игнорира)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как мога да използвам JSON_EXTRACT в MySQL и да получа низ без кавичките?

  2. Задайте часовата зона на базата данни на MySQL на GMT

  3. Клауза MySQL Multiple Where

  4. Каква е разликата между MySQLdb, mysqlclient и MySQL конектор/Python?

  5. mysqli_stmt::bind_param():Броят на елементите в низа за дефиниране на типа не съвпада с броя на променливите за свързване