我有一个表t,有 900 个 id,1-900。为了完成我的任务,我需要做类似的事情(我认为尝试推理这种类型的查询是没有意义的,因为这是我正在尝试的事情): id 不是唯一的(因为它有点像外键)!
SELECT DISTINCT(t5.id) FROM (
SELECT DISTINCT(t1.id) FROM t t1 WHERE {...}
UNION SELECT DISTINCT(t2.id) FROM (
SELECT DISTINCT(t0.id) FROM t t0 WHERE {...}) as t2
INNER JOIN t t3 ON t2.id=t3.id WHERE{...}
UNION SELECT DISTINCT(t3.id) FROM t t4 WHERE {...})
t5 ORDER BY t5.id
问题是查询返回的 ID 与 900 个现有 ID 相差甚远。他们一直到超过 10.000-20.000。请帮助我向您提供所需的所有必要信息。
最佳答案
我不确定,但也许您需要在第二个选择字段中添加as id
,如下所示:
SELECT DISTINCT(id) FROM ( SELECT DISTINCT(t1.id) **as id** FROM t t1 WHERE {...} UNION SELECT DISTINCT(t2.id) FROM t t2 WHERE {...} INNER JOIN t t3 ON t2.id=t3.id WHERE{...} UNION SELECT DISTINCT(t3.id) FROM t t4 WHERE {...}) t5 ORDER BY t5.id
关于MySQL UNION 返回不存在的 id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40131590/