2013-05-12 51 views
0

我有三张桌子。 table1,table2和table3。 enter image description here我应该如何做以下连接以获得所需的结果?

因此,属性对象R1,并R2 table1中对应于表2 “雅虎” 的对象名称, “电子邮件” 和 “平”。并且R3对应于表3的u-id的名称“Jake”。

现在我需要JOIN表1与表2的3倍,并与表3次,以获得如下表:

enter image description here

我听说,我需要使用LEFT JOIN,但不能得到所期望的结果。任何帮助将不胜感激。
此外,新表应通过只做一个(大)查询来创建。

感谢

回答

1
SELECT a.ID, 
     e.name object, 
     a.date, 
     b.name R1, 
     c.name R2, 
     d.`u-name` R3 
FROM table1 a 
     INNER JOIN table2 b 
      ON a.r1 = b.object 
     INNER JOIN table2 c 
      ON a.r2 = c.object 
     INNER JOIN table2 e 
      ON a.object = e.object 
     INNER JOIN table3 d 
      ON a.r3 = d.`u-id` 

为了进一步获得更多的知识有关加入,请访问以下链接:

上面的查询使用INNER JOINtable1如果合适的话所有字段为不可为空。当其中一个是可以为空时并且您想要返回table1的所有列表,请使用LEFT JOIN而不是INNER JOIN


“..Also新表应该这样做只有一个(大)查询来创建。”

CREATE TABLE tableNameHere(col1 INT,....) -- list of columns 
AS 
SELECT a.ID, 
     e.name object, 
     a.date, 
     b.name R1, 
     c.name R2, 
     d.`u-name` R3 
FROM table1 a 
     INNER JOIN table2 b 
      ON a.r1 = b.object 
     INNER JOIN table2 c 
      ON a.r2 = c.object 
     INNER JOIN table2 e 
      ON a.object = e.object 
     INNER JOIN table3 d 
      ON a.r3 = d.`u-id` 
+1

你是不是缺少一个更加入?就像“物体”一样? – Brian 2013-05-12 02:06:43

+0

你是对的。我会更新答案。 – 2013-05-12 02:11:36

+0

看到我更新的答案。 – 2013-05-12 02:12:59

相关问题