2926
Vývoj / Re:Proč nefunguje tento SQL dotaz
« kdy: 15. 10. 2018, 07:43:05 »a) skuste si precitat co pise Vami odkazovany text: "vykonnostny rozdiel".Já jsem to samozřejmě četl, a na rozdíl od vás až do konce. „Liší se pouze zápis. Smysl a provádění je stejné.“
b) pouzit Oracle syntax, ktora je syntakticky cukor ako agument, znaci, ze ocividne netusite o com pisete.Ta Oracle syntax je starší, než JOIN ve standardu. Syntaktický cukr je naopak klíčové slovo ON ve standardu – v případě INNER JOIN se podmínka, která se za ON napíše, jenom pomocí AND připojí k ostatním podmínkám ve WHERE. V případě OUTER JOINu je to to samé, akorát se ta podmínka samozřejmě z INNER JOIN predikátu musí změnit na OUTER JOIN. K tomu JOINu se podmínka pomocí ON připojuje jenom kvůli přehlednosti, klidně tam můžete dát podmínku, která se spojovaných tabulek nijak netýká, a naopak klidně podmínku pro spojení tabulek můžete dát do WHERE.
c) ano, vami uvedene dve SQLka nemaju prakticky rozdiel, ale to sa samozrejme netyka toho na co reagujete.Samozřejmě se to týká toho, na co reaguju. Ten příkaz po změně porovnání NULL hodnoty na IS NOT NULL je naprosto správně, oba následující dotazy jsou ekvivalentní a budou mít stejný prováděcí plán:
Kód: [Vybrat]
SELECT z.name, i.zkr
FROM Zam z
LEFT JOIN Info i
ON z.id_z=i.id_z
WHERE (i.datum > 1561939200 OR i.datum IS NULL);
SELECT z.name, i.zkr
FROM Zam z
LEFT JOIN Info i
ON z.id_z=i.id_z AND i.datum > 1561939200
;