Может кто-то, пожалуйста, помогите мне с этим вопросом:
SELECT
w.aboutme,
w.user_id,
IF ( (SELECT db2.user_relation.id FROM db2.user_relation
WHERE w.user_id = db2.user_relation.user_id AND
db2.user_relation.clients_id = 1), "true", "false") as selected,
(SELECT GROUP_CONCAT(DISTINCT name SEPARATOR ", ") FROM services
WHERE w.user_id = w.user_id) as services
FROM websites w, db2.user_relation
Все работает отлично, если db2.user_relation имеет некоторые записи, но если он пуст, запрос возвращает 0 результатов, даже если в таблице веб-сайтов есть 4 записи.
И все работает, если я беру высказывание IF. Поэтому мне кажется, что мой оператор IF нуждается в некоторой настройке.
Спасибо за любую помощь!
Похоже, вы должны удалить db2.user_relation
из предложения FROM
:
FROM websites w
Вы не используете никаких столбцов, и если строк нет, строки не возвращаются вашим запросом.
Ваш запрос намного лучше написан в виде JOIN
который использует коррелированные подзапросы.
SELECT w.aboutme,
w.user_id,
CASE WHEN u.id IS NOT NULL THEN 'TRUE' ELSE 'FALSE' END AS Selected
GROUP_CONCAT(DISTINCT name SEPARATOR ', ') as services
FROM websites w
LEFT JOIN db2.user_relation u
ON w.user_id = u.user_id
AND u.clients_id = 1
LEFT JOIN services s
ON w.user_id = s.user_id
GROUP BY w.aboutme,
w.user_id
В исходном запросе причина, по которой вы получаете пустые строки, когда db2.user_relation
не имеет строки, состоит в том, что вы выполняете декартовое соединение (CROSS JOIN) между двумя таблицами, поэтому, если одна из таблиц пуста, то, очевидно, конечный результат также пустой.
FROM websites w, db2.user_relation
- это то же самое, что и на FROM websites w CROSS JOIN db2.user_relation