跨行查询条件
Posted
技术标签:
【中文标题】跨行查询条件【英文标题】:Query for conditions across rows 【发布时间】:2015-07-07 07:55:27 【问题描述】:我有一张这样的桌子
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
在这个表中,我有一些重复的条目,因为我需要存储 vip 价格。如果正常人来访,我需要出示
item | price
------+---------
tv | 2000
camera| 3000
phone | 1000
pen | 2
如果贵宾来了,那么我应该显示价格
item | price
------+-----------
tv | 2500
camera| 3500
phone | 1000
pen | 2
最后一列是布尔值。
我需要查询来获取项目。请帮忙查询这个。
【问题讨论】:
为什么同时使用 mysql 和 Postgresql 标签? 我正在使用 Postgresql,但我认为这是很常见的事情,两种类型的数据库的查询应该相同。我可能错了! 查询是否适用于其他数据库无关紧要,不要标记未涉及的产品。 @NarendraSisodiya :你想同时显示pen
吗?
@Ullas - 是的,应该同时显示笔......
【参考方案1】:
普通客户:
select item, price
from tablename
where vip is NULL
贵宾客户:
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)
【讨论】:
【参考方案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 = ...)
【讨论】:
不,这不起作用,'vip' 列标志不是唯一的标准。 看,为了打印贵宾价格,我需要检查给定物品的贵宾价格是否存在?如果存在贵宾价格,则使用该价格,否则使用正常价格..以上是关于跨行查询条件的主要内容,如果未能解决你的问题,请参考以下文章
Python中SQL语句当查询多个条件,如果条件为空,则不加入查询条件;如果条件不为空,则加入查询条件