如何从其他表的公共属性创建表

时间:2015-02-07 09:56:39

标签: mysql database join

我有以下情况

表A有x,y,z列
表B具有a,b,x,y列
表C具有a,s,x,y列

现在我想创建一个包含A,B,C常用列的新表。也就是说,新表将包含x,y列,其中包含三个表中的所有行。我该怎么做?

我想出了这个查询

create table tablename as select A.x,A.y,A.z from A,B,C where (A.x=B.x and A.x=C.x) and (A.y=B.y and A.y=C.y)and (A.z=B.z and A.z=C.z)

因为我试图查询Un existing columns。它给我的列不存在错误。 `

4 个答案:

答案 0 :(得分:0)

尝试将所有三个表连接在一起,如:

SELECT a.x, a.y, a.z, b.a, b.b, c.a, c.s
FROM A a LEFT JOIN B b
ON   a.x = b.x AND a.y = b.y
RIGHT JOIN C c
ON   a.x = c.x AND a.y = c.y

答案 1 :(得分:0)

如果你想要公共列和数据,那么你必须加入它们: xy在所有三个表之间都很常见,那么您可以像下面这样创建它:

Create TABLE Table_name
as
SELECT a.x, a.y
FROM A a INNER JOIN B b
ON   a.x = b.x AND a.y = b.y
INNER JOIN C
ON   a.x = c.x AND a.y = c.y

你可能想要公共列,但不是所有数据都是常见的,也许是来自表A的数据和其他常见数据,那么你可以使用LEFT或RIGHT of FULL OUTER JOINS

答案 2 :(得分:0)

  

表A有x,y,z列
  表B具有a,b,x,y列
  表C有a,s,x,y列

  • 也许您希望通过匹配A,B和C中的行以及每个匹配/共享列的一个副本来生成所有行:

    select A.x, A.y, A.z, B.a, B.b, C.s
    from A
    join B on A.x = B.x and A.y = B.y
    join C on B.a = C.a and B.x = C.x and B.y = C.y
    

    是:

    select * from  A natural join B natural join C
    
  • 也许您想要所有可以从A,B和C制作的行:

    select A.x as Ax, A.y as Ay, A.z as z,
        B.a as Ba, B.b as Bb, B.x as Bx, B.y as By,
        C.a as Ca, C.s as Cs, C.x as Cx, C.y as Cy
    from A cross join B cross join C
    
  • 两个表的自然全外连接返回其自然连接中的所有行(即可以通过匹配行创建的那些行,同时仅保留每列的一个副本)加上通过获取不匹配的行获得的行行和添加仅出现在另一个表中的列,设置为null。它是自然左连接和表的自然右连接的联合。如果你有两张桌子可能就是你想要的。但对于三张桌子,

    (A natural full outer join B) natural full outer join C
    

    与:

    不同
    A natural full outer join (B natural full outer join C)
    

    所以没有:

    A natural full outer join B natural full outer join C
    
  • 也许您的意思是通过从A,B或C中取一行并添加仅出现在其他表中的列,设置为null来获得的行:

          select x, y, z, null as a, null as b, null as s from A
    union select x, y, null as z, a, b, null as s from B
    union select x, y, null as z, a, null as b, s from C
    
  • 也许你的意思是,但只选择x和y(所有表共有的列)或x,y和a(两个或多个表共有的列。)

答案 3 :(得分:0)

尝试此查询:

select a.x, a.y, a.z, b.a, b.b, c.a, c.s from A a, B b, C c where a.x = b.x AND a.y = b.y
AND a.x = c.x AND a.y = c.y