Id нравится делать следующее:
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
)
Не знаю, лучший, но я нашел следующее решение:
WHERE table1.Id IN(
SELECT IF(Id1 = table1.Id, Id1, Id2)
FROM table2
WHERE Id = 1234
)
К сожалению, ответ @lucumt не работает, потому что table1.Id является числовым, а функция CONTACT создает строку.
Я думаю, что это более понятно и позволит повысить производительность:
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
пункт, где вы предоставляете Ид Вы ищете
ON table1.id IN(table2.id1,table2.id2)