2016-06-06 3 views
0
SELECt rb.resource_id, re.code,rb.TYPE, 
(
    SELECT i18n_resourcebase.NAME 
    FROM i18n_resourcebase 
    WHERE language_id=1 
    AND (i18n_resourcebase.resource_id = rb.resource_id) 
) nl_name, 
( 
    SELECT i18n_resourcebase.NAME 
    FROM i18n_resourcebase 
    WHERE language_id=21 
    AND (i18n_resourcebase.resource_id = rb.resource_id) 
) de_name, 
(
    SELECT i18n_resourcebase.NAME 
    FROM i18n_resourcebase 
    WHERE language_id=22 
    AND (i18n_resourcebase.resource_id = rb.resource_id) 
) en_name 

FROM resourcebase rb 
JOIN resort re ON (rb.resort_id=re.resort_id) 
AND re.code='RVRP' 
AND rb.TYPE='accommodationtype' 
AND rb.archived_from IS NULL 
AND re.archived_from IS NULL; 

Я хочу заменить подзапросы на соединения; как мне это сделать?Несколько SUB-запросов в Join

+0

Добро пожаловать в SO. Пожалуйста, взгляните на [ask]. Считайте, что такие вопросы, как «как это сделать?», Рассматриваются здесь [вне темы] (http://stackoverflow.com/help/dont-ask). – Aleksej

ответ

0
SELECt rb.resource_id, MAX(re.code),MAX(rb.TYPE), 
    MAX(CASE WHEN irb.language_id=1 THEN irb.NAME END) as nl_name, 
    MAX(CASE WHEN irb.language_id=21 THEN irb.NAME END) as de_name, 
    MAX(CASE WHEN irb.language_id=22 THEN irb.NAME END) as en_name 
FROM resourcebase rb 
JOIN resort re ON (rb.resort_id=re.resort_id) 
LEFT JOIN i18n_resourcebase irb on (irb.resource_id = rb.resource_id) 
AND re.code='RVRP' 
AND rb.TYPE='accommodationtype' 
AND rb.archived_from IS NULL 
AND re.archived_from IS NULL 

GROUP BY rb.resource_id; 
+0

Нет строк, выбранных моим запросом, и ваш запрос отличается но спасибо. –

+0

Попробуйте добавить LEFT JOIN i18n_resourcebase irb on (irb.resource_id = rb.resource_id и irb.language_id в (1, 21, 22)) – StanislavL

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