Výsledky dotazu závislé na pořadí ve where
- Foowie
- Člen | 269
Před nějakým časem jsem někde četl dotaz, zda-li pořadí tabulek ve FROM u dotazu může změnit výsledek. Ale nemůžu to najít, tak nevím, jeslti to bylo tady nebo úplně někde jinde.
Kdyby se náhodou našel autor tak odpověď je ano, pokud se využívá
LEFT JOIN / RIGHT JOIN / OUTER JOIN
. :)))
Editoval Foowie (26. 5. 2010 16:39)
- Foowie
- Člen | 269
Michalek napsal(a):
Ajo =) Takže se mi to nezdálo :D
Sice už je to nějaký ten týden staré ale kdyby to bylo stále aktuální
tak tady je kód:
Dotazy:
SELECT * FROM a INNER JOIN b ON a.dep=b.id RIGHT JOIN c ON a.dep=c.id;
SELECT * FROM a RIGHT JOIN c ON a.dep=c.id INNER JOIN b ON a.dep=b.id;
Tabulky:
CREATE TABLE IF NOT EXISTS `a` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`dep` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
INSERT INTO `a` (`id`, `dep`) VALUES
(2, NULL);
CREATE TABLE IF NOT EXISTS `b` (
`id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
INSERT INTO `b` (`id`) VALUES
(1),
(2);
CREATE TABLE IF NOT EXISTS `c` (
`id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
INSERT INTO `c` (`id`) VALUES
(1),
(2);
- Lopo
- Člen | 277
paranoiq napsal(a):
kde se využije spojení tří či více tabulek, ve kterém všechny spojovací podmínky selhávají? máte někdo use-case?
myslím, že v reálném světě na pořadí JOINů nezáleží
tak to sa seredne pletes …
na poradi joinov zalezi vela krat, pretoze to ovplyvnuje pocet konecnych vysledkov alebo pocet porovnavanych hodnot pri samotnom joine co je pri velkych tabulkach hodne poznat
samozrejme zalezi aj na tom aky typ joinov sa pouzije a kolko joinov sa zretazi
vo worku mam uplne bezne aj viac nez 5 joinov v 1 dotaze a to nad tabulkami ktore maju 10–100tisice zaznamov, tj pri skladani dotazu sa aj zapotim nez ho poskladam tak aby prebehol co najrychlejsie a dal presne tie vysledky ako potrebujem
- toka
- Člen | 253
Přesně tak, souhlasím. V některých případech, „mini projekty“, není třeba si lámat hlavu nad pořadím JOINů. Ale ve větších projektech se jednak špatným pořadím JOINů nemusíš vůbec dostat k očekávanému výsledku. Druhou vlastností je optimalizace rychlosti, kde má pořadí také vliv.
- Patrik Votoček
- Člen | 2221
já něříkám aby jsi nereagoval… ale že citovat ve svém postu znova to co je v předchozím přízpěvku je na zbytečný spam…