Используя 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
Любая помощь приветствуется, чтобы получить запрос для вывода всех совпадающих строк, а также проверить таблицу favourites
.
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
Вы должны изменить ваше ВНУТРЕННЕЕ СОЕДИНЕНИЕ для таблицы заданий на ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ, чтобы они выбирались независимо от того, существуют они в таблице заданий или нет.
Похожие вопросы
Новые вопросы
mysql
MySQL — это бесплатная система управления реляционными базами данных (RDBMS) с открытым исходным кодом, которая использует язык структурированных запросов (SQL). НЕ ИСПОЛЬЗУЙТЕ этот тег для других БД, таких как SQL Server, SQLite и т. д. Это разные БД, которые используют свои собственные диалекты SQL для управления данными. В вопросе всегда указывайте точную версию сервера. Версии 5.x сильно отличаются по своим возможностям от версий 8+.