比较子查询中的两列值

时间:2018-07-26 15:00:30

标签: mysql

我想执行以下操作:

WHERE table1.Id IN(
    SELECT Id1, Id2
    FROM table2
    WHERE Id = 1234
)

但是问题在于子查询是一个行子查询,并且会生成错误。

有什么方法可以将ID1和Id2从列转换为行以用于IN比较?

到目前为止,我发现这样做的唯一方法是这样,这并不理想:

WHERE
    table1.Id  = (
        SELECT Id1
        FROM table2
        WHERE Id = 1234
    ) OR
    table1.Id  = (
        SELECT Id2
        FROM table2
        WHERE Id = 1234
    )

2 个答案:

答案 0 :(得分:0)

不知道最好的解决方法,但是我找到了以下解决方案:

WHERE table1.Id IN(
    SELECT IF(Id1 = table1.Id, Id1, Id2)
    FROM table2
    WHERE Id = 1234
)

不幸的是,@ lucumt答案无效,因为table1.Id是数字,并且CONTACT函数创建了一个字符串。

答案 1 :(得分:0)

我认为这更清楚,并且可以提供更好的性能:

select table1.* 
from table1
    JOIN table2 ON (table1.Id = table2.Id1 or table1.Id = table2.Id2)
where table1.Id = 2

检查小提琴http://sqlfiddle.com/#!9/31d26a/5

请注意,它有一个where子句,您可以在其中提供要搜索的ID