Mysql在不同的行和列中选择相同的值
我想选择旧的和新的id中具有相同值的行,因此我的选择应该返回示例中的第1行和第4行Mysql在不同的行和列中选择相同的值,mysql,sql,Mysql,Sql,我想选择旧的和新的id中具有相同值的行,因此我的选择应该返回示例中的第1行和第4行 new_id old_id 000 333 111 666 222
new_id old_id
000 333
111 666
222 555
333 777
我有这个查询,但它不起作用,它只返回所有记录试试下面的逻辑-
SELECT *
FROM `table` AS `t`
INNER JOIN ( SELECT * FROM `table` ) as `old`
ON `old`.`old_id` = `t`.`new_id`
我只想使用
exists
:
SELECT DISTINCT C.* FROM
(
SELECT A.new_id
FROM your_table A
INNER JOIN your_table B ON A.new_id = B.Old_id
)A
INNER JOIN your_table C
ON A.new_id = C.new_id
OR A.new_id = C.old_id
特别是,这可以利用
(旧id)
和(新id)
上的索引。有了这些索引,这应该是最快的解决方案。在您的示例中,我看不出旧id和新id的值有多相同<代码>从表中选择*,其中旧\u id=新\u id是满足问题最低可理解部分的简单答案。一个适当的最小表声明和与该样本数据匹配的样本数据的预期结果将使此易于理解。欢迎来到SO。
select t.*
from t
where exists (select 1
from t t2
where t2.new_id = t.old_id
) or
exists (select 1
from t t2
where t2.old_id = t.new_id
) ;