Вопрос
Я пытаюсь использовать значение другого поля внутри IN.
SELECT types.id, title, auth_users.types
FROM types
LEFT JOIN auth_users ON auth_users.id IN (8,9)
WHERE types.id IN (1,2,3)
GROUP BY types.id
Работает
SELECT types.id, title, auth_users.types
FROM types
LEFT JOIN auth_users ON auth_users.id IN (8,9)
WHERE types.id IN (auth_users.types)
GROUP BY types.id
Не работает
http://pastebin.com/m76ae0596 Более подробную информацию можно найти здесь
auth_users.types = 1,2,3
Решение
Вам нужно использовать FIND_IN_SET
- см. этот вопрос: МойСкл:Выберите оператор с помощью оператора IN
Другие советы
К сожалению, IN (...)
не будет пытаться проанализировать значение поля varchar для извлечения значений, которые вы хотите сопоставить.
По сути, он просто проверяет, является ли «types.id» одним из «1, 2, 3» (т.не 1, 2 или 3, а фактическое одно значение «1, 2, 3».)
Одним из способов решения этой проблемы было бы наличие в базе данных функции, которая возвращает набор результатов, принимает это значение varchar, анализирует его и возвращает 3 строки для вашего примера.
Помимо этого, вам нужно либо переписать, чтобы использовать LIKE (который будет работать ужасно), либо вам нужно самостоятельно проанализировать эти значения и поместить результат непосредственно в SQL.
Пытаться подзапросы строк:
SELECT column1,column2,column3
FROM t1
WHERE (column1,column2,column3) IN
(SELECT column1,column2,column3 FROM t2);
РЕДАКТИРОВАТЬ:
На самом деле, глядя на ваш Pastebin, вы сохраняете «1,2,3» в одной строке как varchar?Это не сработает.
Я думаю, он ищет простое объединение
ЛЕВОЕ ПРИСОЕДИНЕНИЕ auth_users ON Types.id = auth_users.types
ГДЕ auth_users.id В (8,9)