![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 11 Pomógł: 0 Dołączył: 9.07.2015 Ostrzeżenie: (0%) ![]() ![]() |
Witam mam 3 tabele
USERS, pola name,uid(moje unikalne id) PERM, value PREMIUM, uid (wypisałem tylko pola które mnie interesują) i chce zrobić zapytanie typu select który pobierze mi wszystko userów z bazy USER których name nie ma w bazie PERM pod polem value oraz tych których uid nie znajduje sie w bazie PREMIUM. próbowałem SELECT * FROM users JOIN perm ON users.name != perm.value; i niestety było tak że jeden user był pokazany tyle razy ile jest rekordów w tabeli perm;/ taki przykład USERS name = dekros uid=1231231123 name = test uid = 939293902 name = testowy uid = uid = 3213598003 PERM value = dekros PREMIUM uid = 3213598003 i zapytanie powinno pokazać mi tylko gracza test bo znajduje sie tylko w tabeli USERS, gracza dekros nie bo jest w PERM a test tez nie bo jest w PREMIUM Ten post edytował dekros 6.09.2016, 16:34:20 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
2x LEFT JOIN (pomiędzy USERS i PERM oraz USERS i PREMIUM)
w WHERE 2x IS NULL (na odpowiednie pola w PERM i PREMIUM). -------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 11 Pomógł: 0 Dołączył: 9.07.2015 Ostrzeżenie: (0%) ![]() ![]() |
2x LEFT JOIN (pomiędzy USERS i PERM oraz USERS i PREMIUM) w WHERE 2x IS NULL (na odpowiednie pola w PERM i PREMIUM). hmm a ten WHERE to zamiast ON mam dać? coś ala SELECT * FROM users LEFT JOIN perm WHERE users.name = perm.value IS NULL; ? nie amm ajk sprawdzić bo na telefonie jestem teraz;/ |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
WHERE masz dać w WHERE.
-------------------- |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 95 Pomógł: 7 Dołączył: 27.10.2015 Ostrzeżenie: (0%) ![]() ![]() |
Nie rób LEFT JOINa bo będziesz cierpiał jak będzie więcej danych, czemu tak jest?
Ponieważ optymizer SQL musi zrobić całego JOINA, a dopiero potem przefiltrować wyniki. "That's why the LEFT JOIN / IS NULL query takes 2-3 times as much as the NOT EXISTS / NOT IN query." Poszukaj opracowań w internecie czemu tak jest, jak jesteś ciekawy. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 11 Pomógł: 0 Dołączył: 9.07.2015 Ostrzeżenie: (0%) ![]() ![]() |
SELECT * FROM `user` LEFT JOIN perm ON perm.value != user.nick LEFT JOIN premium ON premium.uuid != user.uuid
zrobiłem takie coś niby udało się zapytanie ale i tak nie pokazuje mi rekordów jakbym chciał, tzn pokazuje tak jak z tabeli premium dane osób które tam sam niby są a ich nie ma @javafxdev a co używac zamiast tego? |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
Nie rób LEFT JOINa bo będziesz cierpiał jak będzie więcej danych, czemu tak jest? Ponieważ optymizer SQL musi zrobić całego JOINA, a dopiero potem przefiltrować wyniki. "That's why the LEFT JOIN / IS NULL query takes 2-3 times as much as the NOT EXISTS / NOT IN query." Poszukaj opracowań w internecie czemu tak jest, jak jesteś ciekawy. To o czym piszesz tyczy się MSSQL Server. W przypadku MySQL użycie LEFT JOIN jest optymalizowane do NOT IN. A NOT EXISTS delikatnie wolniejsze. -------------------- |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 10:58 |