Вопрос

Я пытаюсь использовать значение другого поля внутри 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)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top