sql >> Database >  >> RDS >> Oracle

impliciete inner joins - zijn ze gelijk?

Ik ga in op de vraag of die ongelijkheden altijd . zijn WAAR. Het antwoord is "nee", niet in SQL. Onder de meeste omstandigheden zijn ze gelijkwaardig. Het probleem doet zich voor bij impliciete typeconversie.

In het bijzonder, als a.id is een getal en andere kolommen zijn strings, dan heb je de situatie waarin:

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

Je kunt dit zien op deze db<>viool. Het zou triviaal zijn om dit in te stellen met JOIN s, maar aangezien ik geen code ga schrijven met komma's in de FROM clausule, laat ik die oefening aan jou over.

In de praktijk moeten id's die worden gebruikt voor joins van hetzelfde type zijn. U kunt zelfs geen relatie met een externe sleutel aangeven als dat niet het geval is. Afgezien van deze best practice zijn de twee zoekopdrachten niet automatisch equivalent.

Opmerking:dit zou net zo waar zijn als u de juiste, expliciete, standaard . zou gebruiken JOIN syntaxis, die ik u ten zeerste aanmoedig om uitsluitend te leren en te gebruiken.



  1. waarom PG::UniqueViolation:FOUT:dubbele sleutelwaarde schendt unieke beperking?

  2. Eén externe sleutel met tabel met 2 referenties

  3. mysql:BRON fout 2?

  4. Een database-e-mailprofiel (SSMS) bijwerken