Sql在一个语句中从第二个表中获取两行

时间:2016-08-13 05:59:31

标签: mysql sql sql-server

我有两张桌子:

Order Table
ID OrderDate Employee Manager
1  1/1/2016 100   101
2  1/2/2016 100   101
3  1/2/2016 100
4  1/2/2016       101

Employee Table
Eid  Name
100  Matt
101  Bill

我需要像这样的结果

1/1/2016 Matt Bill
1/2/2016 Matt Bill
1/2/2016 Matt
1/2/2016      Bill

My SQL
Select O.* from Orders
JOIN Employee E on O.Employee=E.Eid
JOIN Employee E on O.Manager=E.Eid
Where O.OrderDate > '2016-01-01'

我没有结果。如果我删除了JOIN,我会收到所有订单以及员工和经理Eid。

感谢您的帮助, 金

4 个答案:

答案 0 :(得分:1)

在您的查询中,您尚未为Orders表创建别名。并且您必须使用左连接,因为您必须从orders表中获取所有记录,并且如果employee表中存在相关记录,则只会获取它。请查看下面的查询。

Select O.*, E.Name, M.Name from Orders as O
LEFT JOIN Employee E on O.Employee=E.Eid
LEFT JOIN Employee M on O.Manager=M.Eid
Where O.OrderDate > '2016-01-01'

答案 1 :(得分:0)

再次加入同一个表时使用不同的别名。

Select O.* , E.Name, M.Name
from Orders O
JOIN Employee E on O.Employee=E.Eid
JOIN Employee M on O.Manager=M.Eid
Where O.OrderDate > '2016-01-01'

答案 2 :(得分:0)

Select O.* , E.Name, M.Name
from Orders O
JOIN Employee E on O.Employee=E.Eid
JOIN Employee M on O.Manager=M.Eid
Where O.OrderDate > '2016-01-01'

答案 3 :(得分:-1)

试试这个

Select O.* , E.Name, M.Name
 from Orders O
 JOIN Employee E on O.Employee=E.Eid
 JOIN Employee M on O.Manager=M.Eid
 Where date( O.OrderDate)>date( '2016-01-01')

我已添加日期功能,这两个日期将首先转换为MySQL日期格式。