Как проверить существование записи в INNER JOIN?
Есть несколько таблиц из которых происходит выборка
SELECT studentapplication.id,
studentapplication.studentid,
category,
subcategory,
langcategory,
comment,
time,
currenttime,
status,
avatar,
auth.name,
auth.surname,
auth.patronymic
FROM `studentapplication`
INNER JOIN auth
ON studentapplication.studentid = auth.id
INNER JOIN studentapplicationconfirmedby
ON studentapplicationconfirmedby.teacherid <> :user_id
AND studentapplicationconfirmedby.idapply =
studentapplication.id
AND (SELECT*
FROM `studentapplicationconfirmedby`
WHERE studentapplicationconfirmedby.idapply =
studentapplication.id)
WHERE `status` = :satusApp_id;
Теперь цель. В таблице studentApplicationConfirmedBy может присутствовать и не присутствовать запись для операции ON, мне же нужно добавлять данный INNER JOIN только в случае существования записи по (SELECT*FROM `studentApplicationConfirmedBy` WHERE studentApplicationConfirmedBy.idApply = studentApplication.id). В противном случае или не ставить INNER JOIN на эту таблицу или же убирать условие studentApplicationConfirmedBy.idApply = studentApplication.id.
Моя логика была следующей: так как мы добавили (SELECT*FROM `studentApplicationConfirmedBy` WHERE studentApplicationConfirmedBy.idApply = studentApplication.id), то в случае пустого ответа от запроса, будет false и объединения по другим полям не будет, но это не сработало (ошибка: [21000][1241] Operand should contain 1 column(s)).
Как это реализовать?
(p.s извините за отсутствие переноса строк)
Ответы (1 шт):
SELECT studentapplication.id,
studentapplication.studentid,
category,
subcategory,
langcategory,
comment,
time,
currenttime,
status,
avatar,
auth.name,
auth.surname,
auth.patronymic
FROM `studentapplication`
INNER JOIN auth
ON studentapplication.studentid = auth.id
LEFT JOIN studentapplicationconfirmedby
ON studentapplicationconfirmedby.teacherid <> :user_id
AND studentapplicationconfirmedby.idapply =
studentapplication.id
WHERE `status` = :satusApp_id;
Если я все правильно понял