Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Mysql, pobieranie danych z 3 tabel na raz xD
Forum PHP.pl > Forum > Bazy danych > MySQL
dekros
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
trueblue
2x LEFT JOIN (pomiędzy USERS i PERM oraz USERS i PREMIUM)
w WHERE 2x IS NULL (na odpowiednie pola w PERM i PREMIUM).
dekros
Cytat(trueblue @ 6.09.2016, 17:40:56 ) *
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;/
trueblue
WHERE masz dać w WHERE.
javafxdev
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.
dekros
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?
trueblue
Cytat(javafxdev @ 6.09.2016, 21:54:21 ) *
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.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.