Mysql запрос IF оператор не работает правильно

0

Может кто-то, пожалуйста, помогите мне с этим вопросом:

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 нуждается в некоторой настройке.

Спасибо за любую помощь!

Теги:

2 ответа

1
Лучший ответ

Похоже, вы должны удалить db2.user_relation из предложения FROM:

FROM websites w

Вы не используете никаких столбцов, и если строк нет, строки не возвращаются вашим запросом.

  • 0
    Спасибо, Боже, так просто
0

Ваш запрос намного лучше написан в виде 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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню