sql >> Databáze >  >> RDS >> Oracle

implicitní vnitřní spojení – jsou si rovny?

Budu se zabývat otázkou, zda jsou tyto nerovnosti vždy skutečný. Odpověď je "ne", ne v SQL. Ve většině případů jsou rovnocenné. Problém nastává u implicitní konverze typu.

Zejména pokud a.id je číslo a ostatní sloupce jsou řetězce, pak máte situaci, kdy:

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

Můžete se podívat toto na této db<>hudle. Bylo by triviální nastavit to pomocí JOIN s, ale protože nebudu psát kód, který má čárky v FROM klauzule, toto cvičení nechám na vás.

V praxi by id použité pro spojení měly být stejného typu. Nemůžete ani deklarovat vztah cizího klíče, pokud tomu tak není. Pomineme-li tento osvědčený postup, tyto dva dotazy nejsou automaticky ekvivalentní.

Poznámka:Totéž by platilo, pokud byste použili správný, explicitní, standardní JOIN syntaxi, kterou vám důrazně doporučuji, abyste se ji naučili a používali výhradně.



  1. Jak vypočítat místo na disku používané tabulkou MySQL z datových typů sloupců a počtu řádků?

  2. Mysql vyberte místo, kde není v tabulce

  3. mysql WHERE IN řetězec pole / uživatelské jméno

  4. Postgres:Nebyl nalezen žádný vhodný ovladač pro jdbc