Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 9.05.2015 Ostrzeżenie: (0%)
|
Witajcie.
Postanowiłem założyć konto na Forum. Od kilku miesięcy korzystałem z jego pomocy, głównie przeszukując archiwalne tematy, jednak dzisiaj potrzebuję Waszej pomocy. Mam do wykonania takie zapytanie MYSQL: muszę sprawdzić czy podany rekord id_klienta o wartości dajmy na to 10 w tabeli KLIENCI został użyty w innych tabelach. Zapytanie miało by zwraca łączną liczbę wystąpień we wszystkich tabelach (np. w 6 podanych tabelach). Próbowałem za pomocą JOIN ale strasznie skomplikowane przy wielu tabelach. Czytałem też o HAVING, ale trochę tego nie ogarniam. Dodam też pracuję przy pomocy Codeigniter. Macie jakiś pomysł? (IMG:style_emoticons/default/wink.gif) |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 1 421 Pomógł: 310 Dołączył: 18.04.2012 Ostrzeżenie: (0%)
|
Omatkoboska...
NOT IN bez warunku na NULL? http://sqlfiddle.com/#!9/9f0e5/1 Powinno być tak: http://sqlfiddle.com/#!9/9f0e5/2 W tym drugim wydajnościowo do dupy maksymalnie. WHERE powinien być w środku, w każdym podzapytaniu. |
|
|
|
Post
#3
|
|
|
Grupa: Zarejestrowani Postów: 60 Pomógł: 10 Dołączył: 17.11.2011 Ostrzeżenie: (0%)
|
Omatkoboska... NOT IN bez warunku na NULL? http://sqlfiddle.com/#!9/9f0e5/1 Powinno być tak: http://sqlfiddle.com/#!9/9f0e5/2 W tym drugim wydajnościowo do dupy maksymalnie. WHERE powinien być w środku, w każdym podzapytaniu. Ciężko odpowiedzieć precyzyjnie na pytanie jeżeli nie znam schematu bazy. Jeżeli w tabelach na id_klient jest ustawione, iż nie może przyjmować wartości null to niema problemu, w ręcz dodatkowy warunek jest zbędny "bo wydajność" (niby niewielka będzie różnica, ale przy komercyjnych rozwiązania każdy czas się liczy). Co do drugiego zapytania to masz rację mogłem ograniczyć wcześniej i nie rzeźbić po wszystkich rekordach. Zresztą jest to proponowane rozwiązanie. Ten problem ma kilka rozwiązań, a mysql niestety ma kilka ograniczeń między innymi brak klauzuli WITH za pomocą której można w przejrzysty sposób ładnie załatwić sprawę bez zagnieżdżonych zapytań. Sprawę można załatwić również za pomocą INNER JOIN lub NOT EXISTS. Jak to się mówi temat woda, ale dzięki za zwrócenie uwagi. Na drugi raz będę dokładniej analizował problemy na tym forum, aby podać precyzyjną odpowiedź. Ten post edytował DarkAbso 11.05.2015, 14:50:01 |
|
|
|
zoltodziob Zliczanie wystąpień rekordu w tabelach 9.05.2015, 18:41:06
mmmmmmm Funkcje agregujące (Count) przyjacielem twym. Łącz... 10.05.2015, 00:08:56
zoltodziob Nie wiem czy dobrze rozumiem, ale poniższy kod na ... 10.05.2015, 10:20:36
lukasz1985 Zlicz z każdej tabeli osobno i zsumuj
[PHP] pobie... 10.05.2015, 11:18:21
zoltodziob Takiego rozwiązania chciałem uniknąć. Chciałem to ... 10.05.2015, 13:45:02
viking Od tego jest sam silnik BD. Innodb oraz ON DELETE ... 10.05.2015, 14:12:58 
DarkAbso Cytat(viking @ 10.05.2015, 15:12:58 )... 11.05.2015, 12:25:37
zoltodziob Zgadza się id_klient nie może przyjmować wartości ... 12.05.2015, 19:29:57
salfunglandyare on delete restrict lub no action spowoduje, że pod... 12.05.2015, 20:43:01
zoltodziob Zrobię chyba tak jak zaproponował salfunglandyare.... 12.05.2015, 20:50:40
DarkAbso Zapytanie z left join'ami prawdopodobnie będzi... 12.05.2015, 22:04:55
salfunglandyare Cóż, jestem pewny, że szybciej niż subqueries ale... 12.05.2015, 22:11:22
DarkAbso Nie do końca i już wytłumaczę dlaczego (chociaż mo... 12.05.2015, 23:34:56
salfunglandyare masz rację, ale ja pisałem o subquerries w sensie ... 12.05.2015, 23:46:50
DarkAbso Jak już pisałem, temat woda. Jest kilka rozwiązań,... 13.05.2015, 00:08:59 ![]() ![]() |
|
Aktualny czas: 3.04.2026 - 23:24 |