2013-07-10 29 views
1

我有2个表所示:重命名为内列名加入

Table 'c' 

| id | item_1 | item_2 | 
------------------------------- 
| 1 | 1  | 2  | 
------------------------------- 

Table 'i' 

| id | name | 
------------------- 
| 1 | item | 
------------------- 
| 2 | item_2 | 
------------------- 

不,我需要c中的结果,包括项目的名称,从表中获取。所以我为此构建了一个内部JOIN。

SELECT c.*, i.name FROM c 

INNER JOIN i ON 
c.item_1 = i.id 
OR 
c.item_2 = i.id 

这工作“很好”。但我得到这样的回:

| id | item_1 | item_2 | name | 
    ---------------------------------------- 
    | 1 | 1  | 2  | item_2 | 
    ---------------------------------------- 

问题是清楚的 - 我需要找回两个item_ids的名称,但只得到一个。那么是否可以为列设置一个新名称?是这样的:

SELECT c.*, i.name FROM c 

INNER JOIN i ON 
c.item_1 = i.id SET name AS name_1 
INNER JOIN i ON 
c.item_2 = i.id SET name AS name_2 

那么结果将是这样的:

| id | item_1 | item_2 | name_1 | name_2 | 
    ---------------------------------------------------- 
    | 1 | 1  | 2  | item_1 | item_2 | 
    ---------------------------------------------------- 

回答

3

喜欢的东西?

SELECT c.*, 
     i1.name as name_1, 
     i2.name as name_2 
    FROM c 
    INNER JOIN I as i1 
    ON c.item_1 = i1.id 
    INNER JOIN I as i2 
    ON c.item_2 = i2.id 
+0

谢谢!工作很好! – TJR

1

此有异曲同工之

SELECT c.*, 
     i1.name as name_1, 
     i1.name as name_2 
    FROM c 
    INNER JOIN I as i1 
    ON c.item_1 = i1.id 
1

尽管你的表的设计是相当咩,您可以通过使用别名加入牌桌多次。

SELECT c.*, 
     i1.name as name1, 
     i2.name as name2 
FROM (c INNER JOIN i AS i1 ON c.item1=i1.id_i) 
    INNER join i as i2 ON c.item2=i2.id_i 

但是请重新考虑表格设计,它是一个简单的1:n关系,在c和i之间!

+0

这只是一个示范。在这种情况下,我需要这些表格之间的关系表格是没有意义的。这只是一个简单的结构演示。但是,谢谢(: – TJR