2015-07-07 12 views
5

Mam tabeli jak toZapytanie o warunkach w wierszach

id | item | price | vip 
---+--------+--------+----- 
0 | tv | 2000 | NULL 
1 | tv | 2500 | TRUE 
2 | camera| 3000 | NULL 
3 | camera| 3500 | TRUE 
4 | phone | 1000 | NULL 
5 | pen | 2  | NULL 

w tej tabeli, mam kilka zduplikowane wpisy, bo trzeba przechowywać vip cenę. Jeśli normalny człowiek wizycie, muszę pokazać

item | price 
------+--------- 
tv | 2000 
camera| 3000 
phone | 1000 
pen | 2 

jeśli vip osoba przychodzi, to należy pokazać cenę jak

item | price 
------+----------- 
tv | 2500 
camera| 3500 
phone | 1000 
pen | 2 

Ostatnia kolumna jest logiczna.

Potrzebuję zapytania, aby uzyskać przedmioty. Proszę o pomoc w uzyskaniu zapytania na ten temat.

+0

Dlaczego zarówno znaczniki MySQL i Postgresql? – jarlh

+0

Używam PostgreSQL, ale myślę, że to jest bardzo często, zapytanie powinno być takie samo dla obu typów bazy danych. Mogę się mylić ! –

+1

Nie ma znaczenia, czy zapytanie działa z innymi bazami danych, czy nie, nie oznaczaj produktów, które nie są zaangażowane. – jarlh

Odpowiedz

4

Zwykły klient:

select item, price 
from tablename 
where vip is NULL 

vip klientów:

select item, price 
from tablename t1 
where vip is true 
    or not exists (select 1 from tablename t2 
        where t1.item = t2.item 
        and vip is true) 
+0

Tak, działa !! –

0

Wszystko czego potrzebujesz to klauzula gdzie

SELECT price from *** WHERE ((VarVip = true AND vip IS NOT NULL) OR (vip IS NULL)) and item = ... 

nie mogę go przetestować, ale powinien wydrukować cenę VIP, jeśli istnieje, a normalna cena inaczej. Jeśli to doiesn't (w co wątpię) można jeszcze dodać test tak w klauzuli WHERE:

exists(SELECT price from *** where vip IS NOT NULL and item = ...) 
+0

Nie, to nie zadziała, flaga "vip" nie jest jedynym kryterium. –

+0

Zobacz, do drukowania ceny vip, muszę sprawdzić, czy dla danej ceny vip przedmiotu jest obecny, czy nie? Jeśli cena vip jest obecna, użyj tej ceny, w innym przypadku użyj normalnej ceny. –

+1

Błędy składniowe, to ma być vip IS NULL ... – jarlh