Mysql 选择符合其他行条件的行
我想问我如何检查一列中的所有行,这是外键,然后 如果所有这些行都满足某些条件,那么可以在MySQL中从中获取结果 例如,我有三张表,如下所示Mysql 选择符合其他行条件的行,mysql,Mysql,我想问我如何检查一列中的所有行,这是外键,然后 如果所有这些行都满足某些条件,那么可以在MySQL中从中获取结果 例如,我有三张表,如下所示 Products ID Price 1 70 2 20 3 55 Bill ID (others columns are not important) 100 200 300 ProductsBill ID BillID ProductID 1 100 1 2 100 3 3 200
Products
ID Price
1 70
2 20
3 55
Bill
ID (others columns are not important)
100
200
300
ProductsBill
ID BillID ProductID
1 100 1
2 100 3
3 200 2
4 200 1
5 300 2
现在我想选择所有账单,账单中所有产品的价格都高于50,
在这种情况下,哪个应该返回ID为100的账单,因为只有此账单包含价格高于50的产品
提前感谢。加入表格,按billid分组,并在having子句中设置条件:
select
pb.billid
from productsbill pb inner join products p
on p.id = pb.productid
group by pb.billid
having min(p.price) > 50
尝试:
子查询
SELECT DISTINCT pb.BillID FROM
ProductsBill pb JOIN Products p on pb.ProductID = p.ID
WHERE p.PRICE < 50
。。。选择所有BillID,其中至少有一个产品的关联价格小于50。然后,外部查询选择ProductBill表中的所有BillId,这些BillId没有至少一个关联价格<50的产品。谢谢您,我已经尝试过从productsbill中选择pb.BillId,将产品p内部连接到p.id=pb.productid上,其中p.price>50按pb.BillId分组,但它不起作用,where子句和having子句之间的区别是什么?where子句将返回至少有一个price>50的所有BillID。这不是你想要的。当您获得每个billid的最小价格时,使用having子句设置最小价格将大于50的条件。所以所有产品的价格都大于50
SELECT DISTINCT pb.BillID FROM
ProductsBill pb JOIN Products p on pb.ProductID = p.ID
WHERE p.PRICE < 50