Сравните значения двух столбцов в подзапросе

0

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
    )
  • 0
    какую версию MySQL вы используете?
Показать ещё 4 комментария
Теги:

2 ответа

0

Не знаю, лучший, но я нашел следующее решение:

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

К сожалению, ответ @lucumt не работает, потому что table1.Id является числовым, а функция CONTACT создает строку.

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 пункт, где вы предоставляете Ид Вы ищете

  • 0
    Я бы снял скрипку, поскольку ОП заявил, что они не считают это необходимым. И обратите внимание, что предложение ON может быть уменьшено до ON table1.id IN(table2.id1,table2.id2)
  • 0
    Я действительно думаю, что другой пользователь SO мог бы найти больше значения в ответе, включая скрипку :)
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню