选择满足另一行条件的行

时间:2019-08-25 21:16:53

标签: 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     2
4   200     1
5   300     2

现在,我要选择所有BillsID,其中该Bill中的所有产品的价格都高于50, 在这种情况下应返回ID为100的帐单,因为只有此帐单包含价格高于50的产品

谢谢。

2 个答案:

答案 0 :(得分:1)

加入表,按Billid分组,并在hading子句中设置条件:

select 
  pb.billid
from productsbill pb inner join products p
on p.id = pb.productid
group by pb.billid
having min(p.price) > 50

答案 1 :(得分:0)

尝试:

SELECT DISTINCT BillID FROM ProductsBill WHERE BillID NOT IN (
  SELECT DISTINCT pb.BillID FROM
    ProductsBill pb JOIN Products p on pb.ProductID = p.ID
    WHERE p.PRICE < 50
);

子查询...

SELECT DISTINCT pb.BillID FROM
        ProductsBill pb JOIN Products p on pb.ProductID = p.ID
        WHERE p.PRICE < 50

...选择所有至少有一个关联价格<50的产品的BillID。外部查询然后选择ProductBill表中所有没有至少一个的BillID。关联价格<50的产品。