2009-05-18 3 views
3

Я пытаюсь объединить некоторые данные из двух таблиц, но в нескольких столбцах. вот пример:SQL-запрос для объединения нескольких столбцов

Источник стол

ID | Описание изделия | AAAA | BBBB |

Table2 стол

ID | Текст | ID1 | ID2 | ID3 |

где ID1, ID2 и ID3 в Table2 являются идентификаторами из Источник таблицы

Я хотел бы сделать запрос, который дает результаты:

Table2.Text, 
Source.Desc(ID1), 
Source.AAAA(ID1), 
Source.Desc(ID2), 
Source.AAAA(ID2), 
Source.Desc(ID3), 
Source.AAAA(ID3) 

I» Думаю, это будет объединение, но я не могу получить синтаксис правильно ... или мне лучше с Союзом?

ответ

1

Если не все исходные таблицы заполняются в Table2, это будет по-прежнему дают вам частичные результаты:

SELECT 
    t.Desc, s1.Desc, s1.AAAAA, s2.Desc, s2.AAAAA, s3.Desc, s3.AAAA 
    FROM Table2    t 
     LEFT OUTER JOIN Source s1 ON t.ID1 = s1.ID 
     LEFT OUTER JOIN Source s2 ON t.ID2 = s2.ID 
     LEFT OUTER JOIN Source s3 ON t.ID3 = s2.ID 
    WHERE [email protected] 
+0

Это фактический случай в моем сценарии – geocoin

+0

У меня есть дилемма ответа сейчас :) – geocoin

1

Три присоединяется должны сделать трюк:

select A.*, coalesce(B1.Text,B2.Text,B3.Text,'') as Text 
from Source A 
inner join Table2 B1 on B1.ID1=A.ID 
inner join Table2 B2 on B2.ID2=A.ID 
inner join Table2 B3 on B3.ID3=A.ID 
6

Вы можете просто использовать несколько соединений, не могли бы вы? Например:

SELECT tb.Desc, s1.Desc, s1.AAAAA, s2.Desc, s2.AAAAA, s3.Desc, s3.AAAA 
FROM Table2 tb 
    INNER JOIN Source s1 ON tb.ID1 = s1.ID 
    INNER JOIN Source s2 ON tb.ID2 = s2.ID 
    INNER JOIN Source s3 ON tb.ID3 = s2.ID 
+0

Это точно так трюк :) – geocoin

+0

дополнительно: чтобы получить точные результаты, мне было нужно, я использовал левые внешние соединения, но это только моя конкретная ситуация. – geocoin

+0

извините, что убрал выбранный ответ, KM был более правильным для моей ситуации ... – geocoin

4

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

Это плохой дизайн стола (он должен быть нормализован), и я предлагаю вам изменить его сейчас, если это вообще возможно. Там shoudl bea связанная таблица с каждым id в отдельной записи, тогда вы можете присоединиться один раз, и было бы намного эффективнее и намного проще писать код, и вам не пришлось бы менять структуру таблицы и все запросы в тот день, когда вам нужно ID4.

+0

Я рассмотрю это, хотя не вариант * прямо сейчас * – geocoin

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