MySQL选择满足特定条件的行

MySQL选择满足特定条件的行,mysql,select,Mysql,Select,我有一个表订单,看起来确实像这样: order_id | item_id | quantity 1 1 2 1 2 5 2 3 13 2 4 5 3 3 1 我确实想选择所有行,但我想跳过整个订单,因为它确实包含13个项目_id 3。在本例中,它应该跳过顺序为2的行。可以用一个简单的查询吗?您可以

我有一个表
订单
,看起来确实像这样:

order_id | item_id | quantity
     1        1         2
     1        2         5
     2        3         13
     2        4         5
     3        3         1

我确实想选择所有行,但我想跳过整个订单,因为它确实包含13个项目_id 3。在本例中,它应该跳过顺序为2的行。可以用一个简单的查询吗?

您可以使用
NOT EXISTS
子句查找没有13个
项目id的订单
3:

SELECT *
FROM orders o1
WHERE NOT EXISTS (SELECT * 
                  FROM orders o2
                  WHERE o2.order_id = o1.order_id
                    AND o2.item_id = 3 
                    AND o2.quantity = 13)
输出:

order_id    item_id     quantity
1           1           2
1           2           5
3           3           1

NOT EXISTS(不存在)方法似乎按预期工作-非常感谢!我只想补充一个问题:我已经读到嵌套的SELECT查询不利于性能。在这种情况下,我应该担心吗?@Zorann no-notexists查询几乎总是执行此类查询的最有效方式