sql >> Database >  >> RDS >> Mysql

Hoe definieert mysql DISTINCT() in referentiedocumentatie

Voor de volledigheid beantwoord ik de mijne en link ik naar een andere vraag van mezelf. Het lijkt erop dat dit gedrag een direct gevolg is van de SQL-standaard die witruimte tussen de functie en haakjes toestaat.

Aangezien het (over het algemeen) is toegestaan ​​om FUNCTION_NAME (x) te zeggen, wanneer deze functie wordt toegepast op een eerste term van select

SELECT FUNCTION_NAME (x)

dan zal de parser het moeilijk hebben om vast te stellen of dit een context is van een functienaam of een SELECT-modificerend sleutelwoord.

Dus in het bovenstaande geval is de FUNCTION_NAME eigenlijk FUNCTION_NAME_OR_KEYWORD voor de parser.

Maar het gaat verder:aangezien de spatie tussen functienaam en haakjes IS toegestaan, kan de parser eigenlijk GEEN onderscheid maken tussen

SELECT FUNCTION_NAME_OR_KEYWORD (x)

en

SELECT FUNCTION_NAME_OR_KEYWORD(x)

(het moet de trefwoorden testen om te zien of het functies zijn), en aangezien (x) wordt geparseerd naar x, volgt hieruit dat voor FUNCTION_NAME_OR_KEYWORD -> DISTINCT (en alle andere SELECT wijzigende trefwoorden) er geen verschil is tussen

SELECT DISTINCT x, y, z, ...

en

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

QED, maar zonder harde referenties (aanname dat standaard geeft niet om witruimte tussen functienamen en haakjes is, geloof ik, gerechtvaardigd, maar ik kon de BNF-grammatica niet zo goed volgen dat ik de exacte regel kon citeren).

OPMERKING:mysql heeft een bepaald aantal functies waarbij het om witruimte tussen functies en haakjes geeft, maar ik geloof dat dit uitzonderingen zijn (vandaar de serveroptie om het te negeren)



  1. Hoe toegang krijgen tot de Oracle-database via het netwerk?

  2. MySQL-insert bij dubbele update voor niet-PRIMAIRE sleutel

  3. Hoe een bepaald aantal rijen in de tabel te markeren bij gelijktijdige toegang?

  4. Hoe python-woordenboek op te slaan in mysql DB via python