2015-10-05 2 views
0

Существует таблица table1, имеющая столбец hId. Это также может содержать числовые значения, включая также 0 и null. После некоторого соединения связи, каждый из table1.hId имеют full name, но только если hId !=0 or nullВнешнее соединение между столами

Тогда table2.Hpid = table1.hId -- but only if hId is not null or != 0

После этого table2.exId = table3.Id и, наконец, table3.lId = table4.Id

То, что я пытался

SELECT 
    (SELECT table4.fullName 
    FROM table4 
    WHERE table4.Id = table3.lId) 
FROM table1 
JOIN table2 ON table1.hId = table2.hpId 
JOIN table3 ON table3.Id = table2.exId 

Но таким образом я получаю только строки, где table1.id = table2.hId. Я считаю, что мне нужно использовать оператор case (и когда table.hId = 0 or null => затем напечатайте 'error'), но как я могу это достичь?

+0

Подготовка http://sqlfiddle.com будет гораздо легче помочь. – lad2025

+1

В запросе есть ошибка: что такое 'ed.Id' в' JOIN table3 ON ed.Id = table2.exId'? – Paolo

ответ

1

я не могу понять цель, но попытаться идти с левой присоединяется:

SELECT ISNULL(table4.Id, 'ERROR') AS Table4Id 
     , table4.fullName 
FROM table1 
LEFT JOIN table2 ON table1.holidayparkid2 = table2.Id 
LEFT JOIN table3 ON ed.Id = table2.exId <-- what's ed.Id? 
LEFT JOIN table3 ON table4.Id = table3.lId; 
0
SELECT CASE WHEN (table.hId = 0 OR table.hId IS NULL) THEN 'ERROR' 
      ELESE table4.fullName 
     END AS fullName 
FROM table1 
JOIN table2 ON table1.holidayparkid2 = table2.Id 
JOIN table3 ON ed.Id = table2.exId 
JOIN table4 ON table4.Id = table3.lId 
--WHERE table1.hId!=0 AND table1.hId IS NOT NULL --not need with case