我想执行以下操作:
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
)
答案 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