SQL - объединение таблиц - возвращает значение как ноль, если не совпадает - PullRequest
2 голосов
/ 20 января 2012

Вечер, я не уверен в том, что я спрашиваю здесь, но я постараюсь объяснить. Я не лучший в SQL, но я стараюсь ...

SELECT 
    qu.job_id, qu.engineer_id, qu.id AS `quote_id`, 
    jb.author, jb.image_ref, jb.job_title 
FROM 
    `ecom_quotes` qu, `ecom_jobs` jb 
WHERE 
    jb.author = 1 
AND 
    qu.job_id = jb.image_ref
GROUP BY 
    jb.image_ref

Я использовал вышеперечисленное для составления списка заданий, опубликованных пользователем, и получения другой информации из других таблиц на основе идентификатора задания.

Проблема в том, что если в задании нет опубликованных кавычек, оно не отображается (qu.job_id = jb.image_ref).

Так что для быстрого исправления (или так я думал) я заменил его на

( ( qu.job_id = jb.image_ref ) OR ( jb.image_ref != '' ) )

, который сработал, но возвращает идентификатор кавычки, когда с ним не связано ни одной кавычки.

Что я могу сделать?

Ответы [ 2 ]

5 голосов
/ 20 января 2012

Вы хотите использовать LEFT JOIN.

Это все равно вернет запись для ecom_jobs, даже если в ecom_quotes нет соответствующей записи.

РЕДАКТИРОВАТЬ: переключил порядок таблиц ...

SELECT 
    qu.job_id, qu.engineer_id, qu.id AS `quote_id`, 
    jb.author, jb.image_ref, jb.job_title 
FROM 
    `ecom_jobs` jb
    LEFT JOIN `ecom_quotes` qu ON qu.job_id = jb.image_ref
WHERE 
    jb.author = 1
GROUP BY 
    jb.image_re
0 голосов
/ 20 января 2012

Почему бы не попробовать:

SELECT 
    qu.job_id, qu.engineer_id, qu.id AS `quote_id`, 
    jb.author, jb.image_ref, jb.job_title 
FROM 
    `ecom_quotes` qu 
LEFT JOIN
    `ecom_jobs` jb ON qu.job_id = jb.image_ref
WHERE 
    jb.author = 1 
GROUP BY 
    jb.image_ref
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...