2010-12-21 70 views
0

我有一个表t1与三列id,c1,c2,c3与特定数字。我有一个不同的表t2与id,名称其中id值是c1,c2,c3的值。正确的SQL数据表查询写

我无法写一个查询,我可以得到结果为

id | c1 |的名称c2的名称| c3的名字

有人可以帮忙。

+0

您可能需要从表格中发布一些示例数据作为示例。 – JNK 2010-12-21 14:55:02

回答

6

一种方式是写子查询检索每个列的名称:

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

你需要在每个加入三次的价值来获得他们的名字。

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
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列与相同类型的数据,听起来像一个坏的datamodel。做一些正常化。

+0

实际上这三列是树的层次,因此对于特定的集合它代表顶层中间层底层。 – 2010-12-21 15:04:40