Правильное написание SQL-данных - PullRequest
0 голосов
/ 21 декабря 2010

У меня есть таблица t1 с тремя столбцами id, c1, c2, c3 с определенными числами. У меня есть другая таблица t2 с id, имя, где значения в id являются значениями c1, c2, c3.

Я не могу написать запрос, в котором я могу получить результаты как

id | имена с1 | имена с2 | имена с3

Может кто-нибудь помочь.

Ответы [ 3 ]

6 голосов
/ 21 декабря 2010

Один из способов - написать подзапросы для получения имени для каждого столбца:

select  t1.id
,       (select name from t2 where t2.id = t1.c1) as C1Name
,       (select name from t2 where t2.id = t1.c2) as C2Name
,       (select name from t2 where t2.id = t1.c3) as C3Name
from    t1

Или вы можете использовать тройное соединение:

select  t1.id
,       t2_1.name as C1Name
,       t2_2.name as C2Name
,       t2_3.name as C3Name
from    t1
join    t2 as t2_1 on t1.c1 = t2_1.id
join    t2 as t2_2 on t1.c2 = t2_2.id
join    t2 as t2_3 on t1.c3 = t2_3.id
2 голосов
/ 21 декабря 2010

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

SELECT T1.id, FirstJoin.Name, SecondJoin.Name, ThirdJoin.Name FROM T1
JOIN T2 FirstJoin On T1.c1 = FirstJoin.Id
JOIN T2 SecondJoinOn T1.c2 = SecondJoin.Id
JOIN T2 ThirdJoinOn T1.c3 = ThirdJoin.Id

Я прошу прощения за дерьмовый псевдоним.

0 голосов
/ 21 декабря 2010
SELECT
    t1.id,
    sub1.name,
    sub2.name,
    sub3.name
FROM
    t1
        JOIN t2 AS sub1 ON t1.c1 = sub1.id
        JOIN t2 AS sub2 ON t1.c2 = sub2.id
        JOIN t2 AS sub3 ON t1.c3 = sub3.id;

Но вы должны исправить свою модель данных, 3 столбца с данными одного типа, звучит как плохая модель данных.Сделайте некоторую нормализацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...