sql >> Databáze >  >> RDS >> Mysql

Jak mysql definuje DISTINCT() v referenční dokumentaci

Pro úplnost odpovídám na svůj vlastní a odkazuji na další otázka mého vlastního. Zdá se, že toto chování je přímým důsledkem standardu SQL, který umožňuje mezery mezi funkcí a závorkou.

Protože je (obecně) povoleno říkat FUNCTION_NAME (x), pak když je tato funkce aplikována na první výraz select

SELECT FUNCTION_NAME (x)

pak bude mít parser těžké určit, zda se jedná o kontext názvu funkce nebo modifikujícího klíčového slova SELECT.

Takže ve výše uvedeném případě je FUNCTION_NAME ve skutečnosti FUNCTION_NAME_OR_KEYWORD pro analyzátor.

Jde však ještě dále:protože mezera mezi názvem funkce a závorkou JE povolena, analyzátor ve skutečnosti NEMŮŽE rozlišovat mezi

SELECT FUNCTION_NAME_OR_KEYWORD (x)

a

SELECT FUNCTION_NAME_OR_KEYWORD(x)

(musí otestovat klíčová slova, aby zjistil, zda se jedná o funkce), a protože (x) bude analyzováno na x, vyplývá z toho, že pro FUNCTION_NAME_OR_KEYWORD -> DISTINCT (a všechna ostatní klíčová slova modifikující SELECT) není žádný rozdíl mezi

SELECT DISTINCT x, y, z, ...

a

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

QED, ale bez pevných odkazů (předpoklad, že standardní nestará se o mezery mezi názvy funkcí a závorkami je, věřím, oprávněné, ale nebyl jsem schopen dodržet gramatiku BNF do té míry, abych mohl citovat přesné pravidlo).

POZNÁMKA:mysql má určitý počet funkcí, kde se stará o mezery mezi funkcemi a závorkami, ale věřím, že se jedná o výjimky (proto možnost serveru to ignorovat)



  1. Existuje možnost/funkce MySQL pro sledování historie změn záznamů?

  2. Jak mohu uvést, že má stejná data ID jako smyčka while v PHP?

  3. Změna posunu časového pásma na hodnotě datetimeoffset na serveru SQL Server (T-SQL)

  4. Použijte primární klíč citlivý na zvýraznění v MySQL