2013-09-01 2 views
0

У меня есть 2 таблицы mysql, членов и team_members.MySQL выбор данных из 2 таблиц

членов таблицы:

member_id 
name 

team_members стол:

team_id 
member_id 

Я хочу, чтобы выбрать данные из членов таблицы, которая не принадлежит ни к одной команде (не есть в team_members таблица)

    SELECT * 
        FROM members 
        INNER JOIN team_members 
        ON members.member_id = team_members.member_id 

Проблема в том, что запрос выполняет именно то, что мне нужно. Он выбирает данные из членов, у которых уже есть команда. Я также пробовал с '! =', но это дает мне все дубликаты, но не дублирует членов, принадлежащих команде.

ответ

1

Попробуйте это:

SELECT * 
FROM members a 
WHERE NOT EXISTS (
    SELECT 1 
    FROM team_members b 
    WHERE b.member_id = a.member_id 
) 

Обратите внимание, что этот синтаксис очень внимательно следит за тем, как вы сформулировал ваш вопрос. Иногда SQL может быть очень простым; но, как и любой язык, вам нужно освоить словарь.

+0

Да, я пропустил этот важный синтаксис, только один вопрос, что такое 'SELECT 1' для? – xRed

+1

Это просто фиктивное значение, удовлетворяющее синтаксису SELECT; просто заполнитель. – BellevueBob

3

Используйте левое соединение и выберите записи, где Eсть нет соответствующих данных из team_members таблицы:

select m.* 
from members as m 
left join team_members as t on m.member_id = t.member_id 
where t.member_id is null