2009-08-17 3 views
2

Я пытаюсь выбрать записи определенного типа, имя, ИСКЛЮЧАЮЩИЕ записи с тем же именем в определенном идентификаторе. Последняя часть - сложная часть, от которой я не могу опустить голову.Запрос Mysql Исключить определенную запись

SELECT name FROM table WHERE type = $type AND (name is not contained in an entry with id). 

Я хочу, чтобы результатом был набор всех имен, которые имеют определенный тип, но НЕ уже включены в текущий идентификатор.

Нужно ли выполнять два запроса здесь? Или я могу сгустить его одному.

Спасибо.

ответ

9

Вы можете использовать подзапрос для этого:

SELECT name 
FROM table 
WHERE type = $type 
AND name NOT IN (SELECT entry FROM t WHERE id = $id); 
+0

Спасибо Zed, еще одна вещь - что, если у меня есть более одного «имени» для сравнения. Что-то вроде AND name, criteria, rank NOT IN (SELECT * FROM t ...) не работает, где я хочу убедиться, что имя И критерии И ранг НЕ находятся в – Dirk

+0

Я знаю, что могу просто делать больше подзапросов, но снова , могу ли я сгустить его одному? – Dirk

1

ли вы имеете в виду так:

SELECT name FROM table WHERE type = $type 
         AND name not in ('larry','moe','curly'). 

могли бы вы предоставить немного более подробную информацию о вашей схеме? Конкретные примеры всегда помогают.

+0

Это почти то же, что дал Зед, потому что у меня есть более одного поля «имя», чтобы НЕ совпадать на – Dirk

2

Если сравнить несколько значений в строки, возвращаемой подзапросом следующим образом:

SELECT name FROM table 
WHERE type = $type 
AND (name, criteria, rank) NOT IN 
    (SELECT name, criteria, rank FROM t WHERE id = $id); 

Вы должны убедиться, что список (name, criteria, rank) соответствует столбцы, выбранные в подзапроса. Вы не должны использовать SELECT *.

+0

Спасибо, Билл, который исправил мою проблему, должен был принять ответ Зеда, но спасибо в любом случае. – Dirk

+0

Нет проблем, ответ Зеда был более конкретным для вашего первого вопроса. –

 Смежные вопросы

  • Нет связанных вопросов^_^