我对同一个表有两个查询,我需要获取第一个结果集中未出现的结果。
有几种方法可以到达那里(我不要求一种),我的第一次尝试是这样的:
SELECT * FROM
(
SELECT
o.custom_order_id AS 'order',
'yes' AS 'test'
FROM orders
WHERE <first criteria>
UNION
SELECT
o.custom_order_id AS 'order',
'no' AS 'test'
FROM orders
WHERE <second criteria>
) x
WHERE x.test = 'no'
UNION
不会追加已出现在第一个结果集中的行。
实际上我确实得到了类似的行
12345 no
但是 12345
确实出现在第一个结果集中(UNION
之前的查询)。
为什么会这样?
编辑:
custom_order_id
没有索引,也不是主键(尽管它实际上是唯一的) - UNION
是否需要(唯一)索引或 pk 将行识别为 < em>已经在第一个结果集中?
最佳答案
UNION
使用整个元组来确定行是否唯一。在你的情况下,那就是(订单,测试)。
由于您的一半答案测试设置为"is",另一半测试设置为“否”,因此您最终可能会得到多个具有相同 ID 的订单(一个表示是,一个表示否)。
关于mysql - UNION 会覆盖以前的结果吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26254307/