跨行查询条件
Query for conditions across rows
我有一个table这样的
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
在这个table中,我有一些重复的条目,因为我需要存储vip价格。如果是普通人访问,我需要出示
item | price
------+---------
tv | 2000
camera| 3000
phone | 1000
pen | 2
如果vip人来了,我应该显示价格
item | price
------+-----------
tv | 2500
camera| 3500
phone | 1000
pen | 2
最后一列是布尔值。
我需要查询以获取项目。请帮助获取对此的查询。
您只需要一个 WHERE 子句
SELECT price from *** WHERE ((VarVip = true AND vip IS NOT NULL) OR (vip IS NULL)) and item = ...
我无法测试它,但它应该打印 VIP 价格(如果存在),否则打印正常价格。如果没有(我对此表示怀疑),您仍然可以在 where 子句中添加这样的测试:
exists(SELECT price from *** where vip IS NOT NULL and item = ...)
普通客户:
select item, price
from tablename
where vip is NULL
vip客户:
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)
我有一个table这样的
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
在这个table中,我有一些重复的条目,因为我需要存储vip价格。如果是普通人访问,我需要出示
item | price
------+---------
tv | 2000
camera| 3000
phone | 1000
pen | 2
如果vip人来了,我应该显示价格
item | price
------+-----------
tv | 2500
camera| 3500
phone | 1000
pen | 2
最后一列是布尔值。
我需要查询以获取项目。请帮助获取对此的查询。
您只需要一个 WHERE 子句
SELECT price from *** WHERE ((VarVip = true AND vip IS NOT NULL) OR (vip IS NULL)) and item = ...
我无法测试它,但它应该打印 VIP 价格(如果存在),否则打印正常价格。如果没有(我对此表示怀疑),您仍然可以在 where 子句中添加这样的测试:
exists(SELECT price from *** where vip IS NOT NULL and item = ...)
普通客户:
select item, price
from tablename
where vip is NULL
vip客户:
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)