2014-09-09 3 views
0

настоящее время у меня следующий запрос:Multiple SQL присоединяется с одной справочной таблицы

select title,location,categorie,division, 
    reference.description as CA 
from emploi 
left join reference on emploi.categorie = reference.code_ref 
where id_type = 'CA' and emploi.status ='1' 

и у меня есть второй запрос, который является тем же самым, но принимая различные значения из справочной таблицы:

select title,location,categorie,division, 
    reference.description as DI 
from emploi 
left join reference on emploi.division = reference.code_ref 
where id_type = 'DI' and emploi.status ='1' 

Есть ли способ выполнить оба этих запроса?

Я думал, что это было что-то вдоль линий ниже, но это явно не работает:

select title,location,categorie,division, 
    reference.description as DI, reference.description as CA 
from emploi 
(left join reference on emploi.division = reference.code_ref 
    where id_type = 'DI') 
(left join reference on emploi.categorie = reference.code_ref 
    where id_type = 'CA') 
where emploi.status ='1' 

Спасибо!

Примечание: Каждая запись из таблицы EMPLOI имеет столбец деления и категории, которые должны быть оба отображаются в отдельные записи в той же строке

EDIT:
Это рабочий раствор, для тех, кто заинтересован:

select title,location,categorie,division, 
    r.description as DI, r1.description as CA 
from emploi 
left join reference r on emploi.division = r.code_ref 
    and r.id_type = 'DI' 
left join reference r1 on emploi.categorie = r1.code_ref 
    and r1.id_type = 'CA' 
where emploi.status ='1' 
+0

ГДЕ id_type IN ('DI', 'CA') ??? И к какой таблице относятся каждый из этих столбцов (название, местоположение, категоризация, деление, id_type) – Strawberry

+0

@Strawberry я не могу использовать IN, потому что я хочу связать как запись с id_type CA, так и id_type DI с такой же запись. название, местоположение, категоризация, разделение - все это отдельно от emploi, где id_type является частью ссылки. – starvator

+0

@ user3397607: - Тогда вы можете использовать условие 'and' вместо' where', как 'left ссылка ссылки на emploi.division = reference.code_ref и id_type = 'DI'' –

ответ

1

Вы можете попробовать это:

select title,location,categorie,division, 
    r.description as DI, r1.description as CA 
from emploi 
left join reference r on emploi.division = r.code_ref 
left join reference r1 on emploi.categorie = r1.code_ref 
where emploi.status ='1' 
and id_type in ('CA', 'DI') 

В настоящее время у Вас есть неправильный синтаксис, как вы используете Оговорка where два раза с left join. Также поместите псевдоним в таблицы и использовать эти псевдонимы, чтобы получить имя столбца

что-то вроде

select tablename.title,tablename.location,tablename.categorie,tablename.division, 
    r.description as DI, r1.description as CA 
from emploi 
left join reference r on emploi.division = r.code_ref 
left join reference r1 on emploi.categorie = r1.code_ref 
where emploi.status ='1' 
and id_type in ('CA', 'DI') 

Примечание: Используйте правильное имя таблицы вместо tablename выше

EDIT: -

Если вы не хотите использовать предложение IN, то

select title,location,categorie,division, 
    r.description as DI, r1.description as CA 
from emploi 
left join reference r on emploi.division = r.code_ref 
    and r.id_type = 'DI' 
left join reference r1 on emploi.categorie = r1.code_ref 
    and r1.id_type = 'CA' 
where emploi.status ='1' 

Предполагая, что id_type является столбец emploi

+0

Я получаю сообщение об ошибке: «Таблицы или ссылки на функции» и «ссылка» имеют одинаковые открытые имена. Используйте имена корреляции, чтобы отличить их. – starvator

+0

@ user3397607: - Обновлено. Пожалуйста, проверьте –

+0

Я сделал несколько изменений, но это работает отлично! Спасибо! 'Выберите название, местоположение, Категория, деление, r.description, как DI, r1.description, как CA из EMPLOI слева присоединиться к ссылочный г на emploi.division = r.code_ref и r.id_type = 'DI' влево присоединиться ссылка r1 на emploi.categorie = r1.code_ref и r1.id_type = 'CA' где emploi.status = '1'' – starvator

0

он должен работать без скобок(), сглаживание таблиц и префиксы полей с псевдонимом.

+0

Это не дает ответа на вопрос. Чтобы критиковать или запросить разъяснения у автора, оставьте комментарий ниже своего сообщения - вы всегда можете прокомментировать свои собственные сообщения, и как только у вас будет достаточно [репутации] (http://stackoverflow.com/help/whats-reputation), вы будете быть в состоянии [прокомментировать любое сообщение] (http://stackoverflow.com/help/privileges/comment). – reporter

+0

спасибо за совет. Как вы догадались, у меня недостаточно репутации, чтобы прокомментировать этот вопрос. – 1010

1

Есть несколько способов достижения этой цели:

select title,location,categorie,division, 
reference.description as DI 
from emploi 
left join reference on emploi.division = reference.code_ref 
where id_type IN ('DI','CA') and emploi.status ='1' 

или вы можете изменить ИНЕКЕ ОШ

where (id_type = 'DI' OR id_type = 'CA') and emploi.status ='1' 

или если вы с нетерпением ожидаете того, что вы написали первоначально, то

select title,location,categorie,division, 
reference.description as DI, reference.description as CA 
from emploi 
left join reference r1 on emploi.division = r1.code_ref 
and r1.id_type = 'DI' 
left join reference r2 on emploi.categorie = r2.code_ref 
and r2.id_type = 'CA' 

Или пару других способов также ...

+0

Это действительно близко, но это приводит к дублированию, а не к объединению их в одну строку. – starvator

0
select title,location,categorie,division, 
    reference.description as CA 
from emploi 
left join reference reference on emploi.categorie = reference.code_ref 
left join reference reference1 on emploi.division = reference1.code_ref 
where id_type in('CA','DI') and emploi.status ='1' order by id_type 

это будет работать для вас, здесь порядок по используется для определения порядка оператора выбора

+0

Говорит мне, что мне нужно использовать имена корреляций. «Таблицы или функции« ссылка »и« ссылка »имеют одинаковые открытые имена. Используйте имена корреляции, чтобы отличить их. ' – starvator

+0

Я обновил свой ответ, теперь он работает для вас сейчас –

Смежные вопросы