MySQL-如果条件不唯一,则丢弃记录
我正在尝试构建这个查询,我认为在不使用子查询的情况下对其进行优化有点复杂MySQL-如果条件不唯一,则丢弃记录,mysql,Mysql,我正在尝试构建这个查询,我认为在不使用子查询的情况下对其进行优化有点复杂 | baggage_id | checkpoint | status | |------------|------------|--------| | 1 | 3 | 1 | | 2 | 3 | 1 | | 2 | 5 | 1 | | 3 | 3 |
| baggage_id | checkpoint | status |
|------------|------------|--------|
| 1 | 3 | 1 |
| 2 | 3 | 1 |
| 2 | 5 | 1 |
| 3 | 3 | 0 |
| 4 | 3 | 1 |
| 5 | 3 | 1 |
| 6 | 3 | 0 |
这应该会回来
| baggage_id | checkpoint | status |
|------------|------------|--------|
| 1 | 3 | 1 |
| 4 | 3 | 1 |
| 5 | 3 | 1 |
我只需要bagagges_id,其中:
检查点=3
状态=1
没有检查点为5且状态为1的行李识别号
有人能帮我吗
谢谢。一种方法是左连接,并在集合上折叠以排除
SELECT *
FROM bags b
LEFT JOIN (
-- Find set of baggage_id's to exclude
-- The group-by is to collapse the set to distinct baggage ID's
-- to avoid increasing multiplicity.
SELECT baggage_id, 1 as hasCheckpoint5AndStatus1
FROM bags
WHERE checkpoint = 5 AND status = 1
GROUP BY baggage_id
) b2
ON b.baggage_id = b2.baggage_id
WHERE b.checkpoint = 3 AND b.status = 1
-- If NULL, then baggage_id is NOT excluded
AND b2.hasCheckpoint5AndStatus1 IS NULL
实际上,我正试图跳过子查询。我当前的查询非常类似,选择cp1.*,cp2.*从检查点作为cp1左连接选择*从检查点作为cp1.baggage\u id=cp2.baggage\u id,其中cp1.checkpoint=3和cp1.status=1,cp2.baggage\u id为空@noisedan应将其视为一个而非子查询,因为子查询通常具有负面含义,因为[ab]在select output子句中使用。谢谢,我将使用您的查询: