![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 16 Pomógł: 0 Dołączył: 1.04.2004 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Walcze z tym od wczoraj i pomyslalem ze moze wy mnie nakierujecie na rozwiazanie. Chodzi o odpowiednie wyciagniecie danych z tabeli ktora jest relacja wiele do wielu dla dwoch innych tabel.
Wyglada to mniej wiecej tak w duzym skrocie: tabela: hardware HardID 1 HardID 2 HardID 3 tabela: software SoftID 10 SoftID 11 SoftID 12 tabele: cthardtosoft HardID 1; SoftID 10 HardID 1; SoftID 11 HardID 1; SoftID 12 HardID 2; SoftID 10 HardID 2; SoftID 11 HardID 3; SoftID 10 Zapytanie w postaci listy wszystkich komputerow ktore POSIADAJA jakis soft to prosta sprawa. Ale mam klopot z odwrotna sytujacja. Chce liste komputerow ktore np. NIE POSIADAJA softu o ID 12 Probowalem w taki sposob ale mam przeklamane dane:
lub tak:
Jezeli mam wybierac to wolalbym jedno zapytanie, bez podzapytan. Mam do dyspozycji MySQL 4.1 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 16 Pomógł: 0 Dołączył: 1.04.2004 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Cały problem polegał na tym, że jest to relacja wiele do wielu i jeden HardID moze zawierac wiele SoftID. Jezeli damy warunek tylko w WHERE to wyskocza nam relacje typu:
HardID 1; SoftID 10 HardID 1; SoftID 11 ktore mialy sie nie pokazac w przypadku gdy HardID zawiera SoftID = 12. Realizuja to tak jak napisal @nospor eliminujemy to. Po prostu zlaczenie tabel nastepuje tylko w przypadku SoftID = 12 jezeli tak to mozna okreslic czym zalatwiamy sobie kwestie DISTINCT a NULL powoduje ze wyswietlaja sie tylko te komputery ktore NIE maja SoftID = 12. Ten post edytował Sierak 22.06.2006, 14:18:59 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 26.06.2025 - 06:20 |