比较子查询中的两列值

b09cbbtk  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(192)

我想做以下工作:

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

但问题是子查询是一个行子查询并生成错误。
有没有办法将id1和id2从列转换为行,以便在比较中使用?
到目前为止,我找到的唯一方法是这样做,这并不理想:

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

mmvthczy1#

我认为这一点更清楚,并将有助于更好的表现:

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

ffscu2ro

ffscu2ro2#

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

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

不幸的是@lucumt answer不起作用,因为table1.id是数字,而contact函数创建了一个字符串。

相关问题