Dziwne wyniki SELECT'a
Raker - 14-07-2006 02:46
Dziwne wyniki SELECT'a
Witam wszystkich.
Probowałem wyciągnąć z dwóch tabel dane jednak dziwna rzecz sie stała. Rzecz dzieje sie w MySQL.
Tabele mają różna struktorę jednka niektóre pola się powtażają. Takim polem moze być kolumna 'cid'. Chciałem teraz wybrać z tabel te rekordy w których pola cid sa rowne np. 1 takim oto zapytaniem:
SELECT * FROM tab1, tab2 WHERE tab1.cid = 1 OR tab2.cid = 1 (dokonca tez nie wiem jak to posortowac wzgledem pol id ktore sa w obydwu tabelach. Probowalem tego zapytania z AND ale podobny efekt uzyskuje). Jezeli tab2 jest calkowicie pusta a w tab1 sa rekordy ktore spelnaija zapytanie [czyli cid=1] to nic nie wybierze, natomiast jesli tab2 nie bedzie puste lecz np. rekordy w niej znajdujace sie nie spelniaja zapytania [czyli cid!=1] to zostana wybrane rekordy tylko z tab1 [czyli poprawnie zadzala].
Dlaczego to czy tab2 jest puste lub nie ma taki wplyw na wyciagniecie z tab1?
Dzieki za pomoc.
-- Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
Szuwarek - 14-07-2006 02:46
> Probowałem wyciągnąć z dwóch tabel dane jednak dziwna rzecz sie stała. > Rzecz dzieje sie w MySQL. > > Tabele mają różna struktorę jednka niektóre pola się powtażają. Takim polem > moze być kolumna 'cid'. > Chciałem teraz wybrać z tabel te rekordy w których pola cid sa rowne np. 1 Lepiej użyć UNION, chyba będzie bardziej odpowiadać twoim zamiarom. Nie pamiętam tylko, czy wszystkie wersje MySql obsługują to polecenie. Pozdrawiam Szuwarek
jerzy - 14-07-2006 02:46
Raker napisał(a): > Witam wszystkich. > > Probowałem wyciągnąć z dwóch tabel dane jednak dziwna rzecz sie stała. > Rzecz dzieje sie w MySQL. > > Tabele mają różna struktorę jednka niektóre pola się powtażają. Takim polem > moze być kolumna 'cid'. > Chciałem teraz wybrać z tabel te rekordy w których pola cid sa rowne np. 1 > takim oto zapytaniem: > > SELECT * FROM tab1, tab2 WHERE tab1.cid = 1 OR tab2.cid = 1 może tak SELECT * FROM tab1, tab2 WHERE tab1.cid = tab2.cid and tab1.cid = $cid order by tab1.cid hi J
Artur Gancarz - 19-07-2006 00:45
Użytkownik Raker napisał: > Witam wszystkich. > > Probowałem wyciągnąć z dwóch tabel dane jednak dziwna rzecz sie stała. > Rzecz dzieje sie w MySQL. > > Tabele mają różna struktorę jednka niektóre pola się powtażają. Takim polem > moze być kolumna 'cid'. > Chciałem teraz wybrać z tabel te rekordy w których pola cid sa rowne np. 1 > takim oto zapytaniem: > > SELECT * FROM tab1, tab2 WHERE tab1.cid = 1 OR tab2.cid = 1 (dokonca tez nie > wiem jak to posortowac wzgledem pol id ktore sa w obydwu tabelach. Probowalem > tego zapytania z AND ale podobny efekt uzyskuje). > Jezeli tab2 jest calkowicie pusta a w tab1 sa rekordy ktore spelnaija zapytanie > [czyli cid=1] to nic nie wybierze, natomiast jesli tab2 nie bedzie puste lecz > np. rekordy w niej znajdujace sie nie spelniaja zapytania [czyli cid!=1] to > zostana wybrane rekordy tylko z tab1 [czyli poprawnie zadzala]. > > Dlaczego to czy tab2 jest puste lub nie ma taki wplyw na wyciagniecie z tab1? > > Dzieki za pomoc. > Witaj, w pytaniu nie określiłeś, czy obie tabele mają być jakoś połączone!!! przy pomocy rekordów ze wspólnymi polami, czy nie. Wbrew pozorom nie jest to oczywiste.
Jeśli mają być połączone, to można np. select * from tab1 join tab2 on tab1.cid=tab2.cid where tab2.cid=1;
lecz jesli nie maja byc polaczone, tylko wyswietlone rekordy generalnie od siebie nie zaleza, chcesz tylko miec dane, to: select id,nazwisko from znajomi where cid=1 union select id,tytul from filmy where cid=1; pierwsza czesc przed union da wynik cid=1 z pierwszej tabeli, a drugie koniecznie musi miec ta sama ilosc kolumn (nie typy, lecz ilosc!) i tez da w wyniku wszystkie cid=1; UWAGA: nazwy kolumn w wierszu naglowkowym bedzie wziety z pierwszego SELECT (drugie zostana zignorowane), czyli w tym przypadku bedzie id, nazwisko (zostana zignorowane drugie: id,tytul)
Sprawdzilem to probnie, zadzialalo (drugi kod z mysql jest przeklejony wiec literowek raczej nie ma)
pozdrawiam Artur P.S. Pracowalem na: MySQL 5.0, Linux
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[help] Illustrator CS - =?ISO-8859-2?Q?znikn=B1=B3_Selection_?==?ISO-8859-2?Q?Tool_=28V=29?=
[mysql 4.0] SELECT t1.id, t1.foo FROM t1 oraz COUNT t2 w jednym zapytaniu.
SELECT MAX(nazwaPola) FROM tabela WHERE .... i ORA-01405: pobran? warto?ci? kolumny jest NULL
=?iso-8859-2?q?select_sum_i_dwie_tabele..._b=B3=EAdna_agregac ja?=
=?iso-8859-2?Q?=5BMySql=5D_-_select_po_5_rekordow_mniejssych_i_wi=EAkszych?=
=?iso-8859-2?Q?=5BMySql=5D_Select_wed=B3ug_nazwy_pola?=
=?ISO-8859-2?Q?[mysql]_Nie_potrafi=EA_zgrupowa=E6_selecta_(proste)?=
=?ISO-8859-2?Q?[MS_SQL]_update_wielu_p=F3l_na_raz_z_selecta?=
Wstawianie nowego wiersza w przypadku jego braku podczas SELECT w PostgreSQL
[pgsql] jak =?ISO-8859-2?Q?zrobi=E6_taki_select_=3F?=
zanotowane.pldoc.pisz.plpdf.pisz.plmisida.pev.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|