SQL-запрос для объединения нескольких столбцов
Вопрос
Я пытаюсь объединить некоторые данные из 2 таблиц, но по нескольким столбцам.вот пример:
Источник таблица
Идентификатор | Desc| AAAA| BBBB|
Таблица 2 таблица
Идентификатор | Текст| ID1 | ID2 | ID3 |
где ID1, ID2 и ID3 в Таблица 2 являются идентификаторами из Источник таблица
Я бы хотел выполнить запрос, который выдает результаты:
Table2.Text,
Source.Desc(ID1),
Source.AAAA(ID1),
Source.Desc(ID2),
Source.AAAA(ID2),
Source.Desc(ID3),
Source.AAAA(ID3)
Я бы предположил, что это будет соединение, но я не могу правильно подобрать синтаксис...или мне было бы лучше с Профсоюзом?
Решение
Если не все исходные таблицы заполнены в Таблице2, это все равно даст вам частичные результаты:
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 t.ID=@YourIDHere
Другие советы
Вы могли бы просто использовать несколько объединений, не так ли?Например:
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
Вам нужно присоединиться к исходной таблице три раза, по одному для каждого идентификатора.Вы также могли бы попробовать unuion, чтобы увидеть, какой из них работает лучше.
Это плохой дизайн таблицы (его следует нормализовать), и я бы посоветовал вам изменить его сейчас, если это вообще возможно.Должна быть связанная таблица с каждым идентификатором в отдельной записи, тогда вы могли бы присоединиться один раз, и это было бы намного эффективнее и намного проще в написании кода, и вам не пришлось бы менять структуру таблицы и все запросы в тот день, когда вам понадобится ID4.
Три соединения должны сделать свое дело:
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