此查询适用于利基价格比较网站。
我有2个表,第一个列出产品详细信息,第二个列出与产品相关的所有价格。产品可以有一个或多个价格。
我希望列出所有没有活动价格的产品用于管家。
价格表中可能有一个价格为零的条目,在这种情况下,Prod_price_active将设置为“0”。如果产品确实有价格,则Prod_price_active将设置为“1”
表1
Prod_id
Prod_name
Prod_description
表2
Price_id
Prod_id
Prod_price
Prod_price_active
答案 0 :(得分:1)
要理解的最简单的查询是:
select * from table1
where not exists (
select * from table2
where Prod_price_active = 1
and Prod_id = table1.Prod_id)
这是句子的SQL版本“给我所有没有活跃价格的产品”
答案 1 :(得分:0)
假设每个产品都在价格表中,您可以执行inner join
。
select a.Prod_id, a.Prod_name, a.Prod_description
from PRODUCTS a inner join PRICES b
on a.Prod_id = b.Prod_id
where b.Prod_price_active=0
答案 2 :(得分:0)
您正在寻找一种方法来执行anti-join:
SELECT table1.* FROM table1
LEFT JOIN table2 USING(prod_id)
WHERE Prod_price IS NULL
OR Prod_price_active = 0
这将只保留table1
(“产品表”)中table2
上没有相应条目的行(“价格表”)或那些Prod_price_active
设置为0的人。