2016-09-23 6 views
0

У меня есть 2 таблицы JOBs идентификатор, описание, имя TEST идентификатор, JobId я создал запрос:Sql 2 Таблицы Q?

SELECT jobs.id,jobs.name,jobs.country,jobs.description,test.id,test.jobid 
FROM jobs,test 
WHERE jobs.userid='10' 
AND 
GROUP BY jobs.id 

Он вторит мне все рабочие места, но тест идентификатор во всех 1 Если я это where jobs.id=test.jobid результат известен. Как я могу напечатать все рабочие места, где test.jobid равно job.id и рабочие места, которые не имеют test.jobid

+2

вы делаете декартовое соединение: у вас нет ограничений на то, как ваши таблицы ttwo должны быть объединены, поэтому mysql соединяет каждую запись в 'jobs' с КАЖДОЙ записью в' test'. это означает, что вы получаете результаты «n x m». –

ответ

0

Это звучит как то, что вы ищете является левой команды присоединиться.

SELECT jobs.id AS jobs_id,jobs.name,jobs.country,jobs.description,test.id AS test_id,test.jobid AS job_id_from_test 
    FROM jobs 
    LEFT JOIN test ON test.jobid = jobs.id 
    WHERE jobs.userid='10' 

-Подробная помощь. Вышеприведенный код добавляет команду левого соединения и выводит ненужные операторы «AND» и «GROUP BY». LEFT JOIN, в отличие от обычного JOIN, вернет все применимые значения для таблицы заданий, даже если в тестовой таблице нет соответствующей строки.

1

что вы имели был крест присоединиться. Это не то, что вы хотите. Вы хотите левое соединение.

Как это

SELECT jobs.id,jobs.name,jobs.country,jobs.description,test.id,test.jobid 
FROM jobs 
left join test on jobs.id = test.jobid 
WHERE jobs.userid='10' 
GROUP BY jobs.id 
+1

Лучше поместить больше в этот оператор GROUP BY ... – kbball

+0

@kbball - это mysql - он позволяет вам быть ленивым. – Hogan

+1

спасибо только за редактирование jobs.id = test.jobid – user3026665