2009-07-26 8 views
0

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

На основе вашего pastebin кажется, что вы храните разделенную запятыми строку в auth_users.types. Это так? auth_users.types = '1,2,3'. Я настоятельно рекомендую изменить схему, если это так, попытка присоединиться к этому полю - плохая идея. – hobodave

ответ

0

Попробуйте row subqueries:

SELECT column1,column2,column3 
    FROM t1 
    WHERE (column1,column2,column3) IN 
     (SELECT column1,column2,column3 FROM t2); 

EDIT:

На самом деле, глядя на ваш Pastebin, вы хранения «1,2,3» в одном ряду как VARCHAR? Это не сработает.

1

К сожалению, IN (...) не будет пытаться проанализировать значение поля varchar, чтобы извлечь значения, которые вы хотите сопоставить.

Это в основном просто проверяет, является ли "types.id" является одним из "1, 2, 3" (то есть. Не 1, 2 или 3, но фактически одно значение "1, 2, 3".)

Одним из способов решения этой задачи было бы иметь функцию в базе данных, которая возвращает набор результатов, и принимает это значение varchar, анализирует его и возвращает 3 строки для вашего примера.

Кроме этого, вам необходимо либо переписать, чтобы использовать LIKE (который будет выполняться ужасно), либо вам нужно самостоятельно проанализировать эти значения и непосредственно поместить результат в SQL.

0

Я предполагаю, что он ищет простое соединение

LEFT JOIN auth_users НА types.id = auth_users.types

ГДЕ auth_users. id IN (8,9)