sql >> Database teknologi >  >> RDS >> Oracle

implicitte indre sammenføjninger - er de ligeværdige?

Jeg vil tage fat på spørgsmålet om, hvorvidt disse uligheder altid er rigtigt. Svaret er "nej", ikke i SQL. Under de fleste omstændigheder er de ækvivalente. Problemet opstår med implicit typekonvertering.

Især hvis a.id er et tal og andre kolonner er strenge, så har du den situation, hvor:

1 = '1'        -- true
1 = '1.00'     -- true
'1' = '1.00'   -- false

Du kan se dette på denne db<>violin. Det ville være trivielt at sætte dette op ved hjælp af JOIN s, men da jeg ikke kommer til at skrive kode, der har kommaer i FROM klausul, overlader jeg den øvelse til dig.

I praksis skal id'er, der bruges til joins, være af samme type. Du kan ikke engang erklære et udenlandsk nøgleforhold, hvis de ikke er det. Bortset fra den bedste praksis er de to forespørgsler ikke automatisk ækvivalente.

Bemærk:Dette ville være lige så sandt, hvis du brugte korrekt, eksplicit, standard JOIN syntaks, som jeg kraftigt opfordrer dig til udelukkende at lære og bruge.



  1. få alle automatiske inkrementer heltal til det samme antal cifre med indledende nuller

  2. HTML-tags mangler, når SELECT fra MySQL (Codeigniter)

  3. Unionsforespørgsel med flere valg efter java 8

  4. Få en præcis eksekveringstid for en MySQL-sætning