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

我想问我如何检查一列中的所有行,这是外键,然后 如果所有这些行都满足某些条件,那么可以在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     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