Используя MySQL, я пытаюсь извлечь ВСЕХ people, у которых company_id соответствует 3, а также сравнить, существует ли этот person в таблице favourites.

Я заметил, что если у человека нет job_id, то они не выводятся по запросу ниже.

Приведенный ниже запрос выводит 1 строку, но в таблице people есть 3 строки, которые соответствуют company_id из 3

                SELECT *,
                           j.company_id as companyid,
                           f.id IS NOT NULL AS jid,
                           p.id as pid,
                           f.id AS fave_id,
                           f.id IS NOT NULL AS fave
                      FROM people p  
                INNER JOIN job j 
                        ON p.job_id = j.id
                 LEFT JOIN favourites f
                        ON f.people_id=p.id
                       AND f.user_id = 12
                     WHERE p.company_id = 3
                  ORDER BY p.id ASC

SQLFiddle

Любая помощь приветствуется, чтобы получить запрос для вывода всех совпадающих строк, а также проверить таблицу favourites.

0
ngplayground 18 Авг 2014 в 19:50

2 ответа

Лучший ответ

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

SELECT
    p.*,
    j.company_id as companyid,        
    f.id IS NOT NULL AS jid,
    p.id as pid,
    f.id AS fave_id,
    f.id IS NOT NULL AS fave
FROM people p  
LEFT JOIN job j 
       ON j.id = p.job_id
LEFT JOIN favourites f 
       ON f.people_id=p.id
      AND f.user_id = 12
WHERE p.company_id = 3
ORDER BY p.id ASC
1
Donal 18 Авг 2014 в 16:02

Вы должны изменить ваше ВНУТРЕННЕЕ СОЕДИНЕНИЕ для таблицы заданий на ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ, чтобы они выбирались независимо от того, существуют они в таблице заданий или нет.

1
Ed Williams 18 Авг 2014 в 16:03