Autor | Zpráva | ||
---|---|---|---|
Lion76 Profil * |
#1 · Zasláno: 16. 12. 2007, 15:22:49
Zdravim, mam nize uvedeny dotaz a nechapu, proc se nic nevypise, kdyz je z meho pohledu vsechno v poradku. Ale asi neni, kdyz tento dotaz nevraci zadny radek.
SELECT t1.nazev AS nazev1, t2.nazev AS nazev2 FROM tabulka1 AS t1 LEFT JOIN tabulka1 AS t2 USING (id) WHERE t1.sloupec = 'podminka1' AND t2.sloupec = 'podminka2' |
||
Kajman_ Profil * |
#2 · Zasláno: 16. 12. 2007, 15:26:27
SELECT t1.nazev AS nazev1, t2.nazev AS nazev2
FROM tabulka1 AS t1 LEFT JOIN tabulka1 AS t2 on t1.id=t2.id AND t2.sloupec = 'podminka2' WHERE t1.sloupec = 'podminka1' |
||
Lion76 Profil * |
#3 · Zasláno: 16. 12. 2007, 15:44:55
Kajman_
Ted ten dotaz vypise spravne hodnotu z prvniho sloupce, druhy sloupec obsahuje NULL. Proc? |
||
Lion76 Profil * |
#4 · Zasláno: 16. 12. 2007, 16:39:01
Malicko jsem si s tim pohral a ted to vypisuje to, co ma.
SELECT t1.nazev AS nazev1, t2.nazev AS nazev2 FROM tabulka1 AS t1 LEFT JOIN tabulka1 AS t2 ON t2.sloupec = 'podminka2' WHERE t1.sloupec = 'podminka1' AND t2.sloupec = 'podminka2' Vyreseno. |
||
Lion76 Profil * |
#5 · Zasláno: 16. 12. 2007, 17:13:46
Ale stejne me to nedava klidu, proc to takhle funguje, kdyz Kajman_, profik teto diskuse sestavil dotaz, ktery by mel fungovat, ale nefunguje a me v tomto dalsim sestaveni funguje.
SELECT t1.nazev AS nazev1, t2.nazev AS nazev2 FROM tabulka1 AS t1 LEFT JOIN tabulka1 AS t2 ON t2.id = t2.id WHERE t1.sloupec = 'podminka1' AND t2.sloupec = 'podminka2' Pokud nekdo budete mit cas, tak me to prosim vysvetlete. Predem dekuji. |
||
Kajman_ Profil * |
#6 · Zasláno: 16. 12. 2007, 17:34:14
tak me to prosim vysvetlete
To nikdo nevysvětlí, protože jenom Vy opravdu víte, co chcete - jaké máte v tabulkách vazby a data a čeho chcete dosáhnout. druhy sloupec obsahuje NULL. Proc? To je vlastnost left join. Pokud nenajde odpovídající řádky dle podmínek v on, tak dá z druhé tabulky jen samé null hodnoty. Pokud to nechcete stačí slovíčko left vynechat. |
||
Lion76 Profil * |
#7 · Zasláno: 16. 12. 2007, 18:01:04
Kajman_
Ja nechci spojit tabulky, ja jsem chtel spojit tabulku samou se sebou, proto tam je neustale "tabulka1". Spojit jednu tabulku podle id a podle podminek, tak abych v pripade, ze jedna podminka nebude splnena, tak db vrati 0 radku. Pokud jsou vsechny podminky splneny, tak db vrati jeden radek, ktery obsahuje data. Odmazani LEFT nepomohlo, protoze ted db vrati 0 radku. |
||
Kajman_ Profil * |
#8 · Zasláno: 16. 12. 2007, 19:21:46
Tak asi nebude v datech žádné id vyhovující oběma podmínkám.
|
||
Lion76 Profil * |
#9 · Zasláno: 17. 12. 2007, 13:36:14
Kajman_
Pokud by nebylo v datech zadne vyhovujici id, tak by ani nize uvedeny dotaz nevypsal data. SELECT t1.nazev AS nazev1, t2.nazev AS nazev2 FROM tabulka1 AS t1 LEFT JOIN tabulka1 AS t2 ON t2.id = t2.id WHERE t1.sloupec = 'podminka1' AND t2.sloupec = 'podminka2' Pokud mate chvilku cas, tak si to vyzkousejte, vytvorte si tabulku 'tabulka1' a dejte si tam dva nize uvedeny radky: id | nazev| 1 | podminka1 | 2 | podminka2 | Pokud pouzijete ten muj vyse uvedeny dotaz, tak db vrati radek v podobe | nazev1 | nazev2| | podminka1 | podminka2 | a to je spravny vysledek. Ale kdyz pouziteje SELECT t1.nazev AS nazev1, t2.nazev AS nazev2 FROM tabulka1 AS t1 LEFT JOIN tabulka1 AS t2 on t1.id=t2.id AND t2.sloupec = 'podminka2' WHERE t1.sloupec = 'podminka1' tak db nevrati zadny radek. |
||
Kajman_ Profil * |
#10 · Zasláno: 17. 12. 2007, 13:44:11
V prvním selectu máte ON t2.id = t2.id ve druhém on t1.id=t2.id.
|
||
Lion76 Profil * |
#11 · Zasláno: 17. 12. 2007, 17:44:56
Kajman_
Ano to mate pravdu, ale malicko zapominate na to, ze ten druhy select je Vas. |
||
Kajman_ Profil * |
#12 · Zasláno: 17. 12. 2007, 18:32:45
Já jen přepsal jinak Vaše using(id) z prvního příspěvku i dále píšete, že chcete propojit tu tabulku podle id, což se tím právě děje.
Pokud hledáte id splňující obě podmínky, tak žádné takové id tam není. Zkuste si to uvědomit. Pokud chcete něco jiného, tak si uvědomte, že při absenci přesného popisu se nedá radit. |
||
Lion76 Profil * |
#13 · Zasláno: 17. 12. 2007, 20:35:58
Kajman_
Ja si to uvedomuji, ale me pripada, ze ted odpovidate aniz by jste si to vyzkousel a zapominate na to, ze i mistr tesar se muze nekdy utnout, tim nemyslim nic zleho, protoze chci se neco dozvedet, co bude pro mne prinosne. Nechci nic jineho, jen chci spojit tabulku samou se sebou spravny zpusobem. A nehledal bych zde absenci, ale radeji bych si to na Vasem miste vyzkousel. Muj select: SELECT t1.nazev AS nazev1, t2.nazev AS nazev2 FROM tabulka1 AS t1 LEFT JOIN tabulka1 AS t2 ON t2.id = t2.id WHERE t1.sloupec = 'podminka1' AND t2.sloupec = 'podminka2' Vas select: SELECT t1.nazev AS nazev1, t2.nazev AS nazev2 FROM tabulka1 AS t1 LEFT JOIN tabulka1 AS t2 on t1.id=t2.id AND t2.sloupec = 'podminka2' WHERE t1.sloupec = 'podminka1' Muj select vypise spravny vysledek: | nazev1 | nazev2 | |podminka1 | podminka2 | Vas select vypise nespravny vysledek: | nazev1 | nazev2 | | podminka1 | NULL | Pracovalo se s daty zde uvedenymi a tudiz nebyla zjistena zadna absence, protoze kdyby byla, tak by oba selecty zde uvedene vratily chybovou hlasku, ale nevratily, protoze vratily vysledek, ale rozdilny. Proc? |
||
Kajman_ Profil * |
To je fakt záhada, že když dáte jinou podmínku, budou jiné výsledky ;-)
Ten druhý hledá stejná id splňující obě podmínky. Ten první jakékoliv dvě id, protože tam máte nesmyslnou podmínku t2.id = t2.id. A jasně, že jsem to nezkoušel. Nemám potřebu, mně to chování připadá očekávané a správné. |
||
Alphard Profil |
#15 · Zasláno: 17. 12. 2007, 20:56:15
Lion76
když se do této diskuze připojím on t2.id = t2.id je nesmyslné, spusť si to bez where, měl by jsi dostat něco jako | podminka1 | podminka1 | | podminka1 | podminka2 | | podminka2 | podminka1 | | podminka2 | podminka2 | tedy nedojde ke spojení podle id, ale prostě se vše nakombinuje where pak jen omezí sadu výsledků |
||
Lion76 Profil * |
#16 · Zasláno: 17. 12. 2007, 21:32:05
Kajman_
Podminka spojovaci a podminka omezovaci je velky rozdil, pokud chcete, aby Vam nekdo druhy rozumel, musite byt ve svych reakci vice objektivni, pokud se rozhodnete nekomu pomoct, protoze stejne jako Vy, tak i on nema v ruce kristalovou kouli. ;-) Dekuji za vysvetleni. Hmm, stacilo rict, wole pridej si tam dalsi sloupecek a bude Ti to fungovat. Dekuji za Vas cas. |
||
Lion76 Profil * |
#17 · Zasláno: 17. 12. 2007, 21:34:59
Alphard
Ano muzes, ale uz je to vyresene. O tom, ze ta podminka je nesmyslna, jsem vedel, ale takto to fungovalo a ja jsem chtel vedet, proc ta nesmyslna podminka funguje a spravna podminka nefunguje. |
||
Časová prodleva: 16 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0