Výsledky dotazu závislé na pořadí ve where

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Foowie
Člen | 269
+
0
-

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
+
0
-

Michalek napsal(a):

http://twitter.com/…/14297187906 :)

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);
David Grudl
Nette Core | 8139
+
0
-

Ó, děkují, přesně tohle jsem měl na mysli! :-)

marek.dusek
Člen | 99
+
0
-

Kdy to bude implementované v Nette?

despiq
Člen | 320
+
0
-

nikdy

paranoiq
Člen | 392
+
0
-

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ží

Lopo
Člen | 277
+
0
-

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
+
0
-

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
+
0
-

<OT>@Toka: prosím necituj zbytečně předchozí post (smazal jsem to)</OT>

toka
Člen | 253
+
0
-

vrtak-cz napsal(a):

<OT>@Toka: prosím necituj zbytečně předchozí post (smazal jsem to)</OT>

OK. Zmínil jsem jen svůj názor na věc.

Patrik Votoček
Člen | 2221
+
0
-

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…