通过外键进行SQL Left Join,如何避免重复的列?

时间:2018-08-09 15:25:44

标签: mysql sql

我有很多表与主键字段结合在一起。我可以查询以下内容以获得所需的结果。

Select *
from orders
Left Join serviceorders on orders.contractLineID = serviceorders.lineID
Left Join all_orders on orders.OrderNum = all_orders.ordernum
Left Join invoices on orders.OrderNum = invoices.OrderNum
Left Join schedule on orders.OrderNum = schedule.Ordernum;

但是当我尝试从中创建视图时,我面对重复的列,因为我要连接的每个表中都有ordernum。

我知道我不应该使用*来选择所有内容,但是我不知道从多个表中选择列的语法吗?

是吗?

SELECT orders.column1, orders.column2 schedule.column1, schedule.column 2, invoice.column1, invoice.column2

FROM orders, schedule, invoice

我也看到过您可以使用USING命令,但是其语法尚不清楚。我不确定这是否是更好的选择,因为它只是在所有表中重复的一列。

2 个答案:

答案 0 :(得分:1)

语法如下:

body {
  display: grid;
  grid-template-rows: 50px auto 50px;
  height: 100vh;
  margin: 0;
}

main {
  display: grid;
  grid-auto-rows: 200px;
  overflow: auto;
  background-color: gray;
}

main > article:nth-child(even) {
  background-color: aqua;
}

header { background-color: lightgreen; }
main   { background-color: orangered;  }
footer { background-color: gray;       }
body   { font-size: 1.1em; margin: 0;  }

这是如果您需要视图同时具有两个ID和唯一的名称。更好的是,仅选择所需的列。

答案 1 :(得分:0)

首先,学习使用别名。其次,您应该列出所有列:

Select o.col1, o.col2, so.col3,  -- list columns you want explicitly
       ao.col3 as ao_col3        -- if you still have duplicates, assign new names
from orders o left join
     serviceorders so
     on o.contractLineID = so.lineID left join
     all_orders ao
     on o.OrderNum = ao.ordernum left join
     invoices i
     on o.OrderNum = i.OrderNum left join
     schedule s
     on o.OrderNum = s.Ordernum;