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

klauzule WHERE následovaná JOIN

Domnívám se, že zaměňujete syntaxi SQL s tokem provádění prováděným enginem RDBMS:tento dotaz

SELECT a,b FROM big b
LEFT JOIN (SELECT b as small_b,c,d FROM small) ON big.b=small.small_b
WHERE b.foo='bar'

bude optimalizován tak, aby prováděl spojení pouze s řádky big filtrováno pomocí foo='bar' stavu, nikoli na celém big , kterýmkoli optimalizátorem dotazů, který stojí za to, navzdory skutečnosti, že WHERE klauzule se objeví textově za JOIN .

Možná to budete chtít přepsat bez vnitřního SELECT takhle:

SELECT t1.a as big_a, t1.b as big_b, t2.b as small_b, t2.c, t2.d
FROM big t1
LEFT JOIN small t2 ON t1.b = t2.b
WHERE t1.foo='bar'


  1. Chyby @OneToMany v MySQL:Nelze odstranit nebo aktualizovat nadřazený řádek:omezení cizího klíče selže

  2. Nastavení webového a databázového serveru pro správné časové pásmo UTC

  3. Který přístup je rychlejší pro získání všech POI z MySQL/MariaDB s PHP/Laravel

  4. Vytvoření CRUD pomocí PHP + Bootstrap Modal + Mysql + JS