MySQL连接使用顺序/优先级获取单行

时间:2017-02-03 04:31:33

标签: mysql join

我在MySQL DB中有几个表

EID        Name      
 1        Title A       
 2        Title B       
 3        Title C       
LID    EID     Location  Address     Order   
1       1      Office      NY          1
2       1      Home        IL          2
3       2      Office      CA          1
4       3      Home        NJ          2

我有以上2个表(员工和位置)。我想知道每个员工的位置,办公室作为首选,如果“办公室”不存在,则需要“家”位置。订单栏定义了所需内容的顺序/优先级。

这是需要的输出

EID  LID       Name        Location   Address
 1    1      Title A       Office     NY
 2    3      Title B       Office     CA
 3    4      Title C       Home       NJ

4 个答案:

答案 0 :(得分:1)

以下查询的第一次加入只会连接EmployeeLocation表格,但请注意,这会导致Location加入所有记录。以下查询的关键部分是子查询的第二个INNER JOIN。此子查询标识每个员工ID的最小(即最高优先级)顺序。然后,这将用于丢弃第一个连接中不是最高优先级的记录。

SELECT t1.EID,
       t2.LID,
       t1.Name,
       t2.Location,
       t2.Address
FROM Employee t1
INNER JOIN Location t2
    ON t1.EID = t2.EID
INNER JOIN
(
    SELECT EID, MIN(`Order`) AS min_order
    FROM Location
    GROUP BY EID
) t3
    ON t2.EID = t3.EID AND
       t2.Order = t3.min_order

另一个注意事项:不要命名列Order,这是一个MySQL关键字。为了让我的查询起作用,我不得不把它放在反引号中,至少可以说是不方便,而且可能容易出错。

在这里演示:

SQLFiddle

答案 1 :(得分:1)

获得结果有两种可能性 1)如果您需要基于订单结果,请使用此查询

SELECT e1.EID,l1.LID,e1.Name,l1.Location,l1.Address FROM Employee e1 JOIN (SELECT MIN( {订单{1}}

2)如果您需要结果基于EID,请使用此查询

)as Minorder,EID,LID,Location,Address,Order FROM Location l1 GROUP BY EID)l1 ON l1.EID = e1.EID AND l1.Minorder = l1.Order; {EID {1}} {订单{1}}

额外注意: -
请使用mysql内置关键字作为列名或表名以获取更多信息阅读此链接click here

答案 2 :(得分:0)

您可以使用内部联接

获得预期结果
Select a.eid,b.Lid,a.name,b.location,b.address from Table1 a innner join  (select * from Tableb group by eid) b on
a.eid=b.eid;

答案 3 :(得分:0)

你可以试试这段代码,这会对你有帮助,因为我认为

select E.EID,E.name,ad.LID,ad.LOCATION,ad.ADDRESS,ad.[order]
from @emp E inner join @address ad  on E.EID = ad.EID
            inner join (select EID, min([order]) [order]
                        from @address 
                        group by EID) tt on ad.EID = tt.EIDand ad.[order] = tt.[order]