【问题标题】:SQL Join query with OR Clause带有 OR 子句的 SQL 连接查询
【发布时间】:2016-11-20 17:07:52
【问题描述】:

在创建 SQL 查询时需要帮助。有点困惑所以问问题。情况如下:

我有一张表说 EmpInfo: EmpFirstName, EmpLastName, EmpID, EmpGender, EmpDOB, EmpAddress 表 2 EmpMasterID: EmpID1, EmpId2, AbsoluteEmpID

EmpInfo 包含样本数据:

EmpFirstName | EmpLastName | EmpID | EmpGender | EmpDOB  | EmpAddress
First1       | Last1       | 10    |  M        | 1/1/92  | Addr1
First2       | Last2       | 20    |  F        | 1/12/92 | Addr2
First3       | Last3       | 30    |  F        | 1/12/94 | Addr3
First4       | Last4       | 40    |  M        | 1/2/94  | Addr4
First5       | Last5       | 60    |  M        | 1/1/91  | Addr5
First6       | Last6       | 70    |  F        | 1/12/92 | Addr6
First7       | Last7       | 80    |  F        | 1/12/95 | Addr7
First8       | Last8       | 90    |  M        | 1/2/97  | Addr8

EmpMasterID 样本数据:

EmpID1 | EmpId2 | AbsoluteEmpID
10     |  20    |  10
60     |  70    |  60

现在我必须加入这两个表并获得以下列:

EmpID, EmpFirstName, EmpLastName, AbsoluteEmpID

如果EmpInfo.EmpID = EmpMasterID.EmpID1 OR EmpInfo.EmpID = EmpMasterID.EmpID2,AbsoluteEmpID 的值将从 EmpMasterID 表中获取 否则 AbsoluteEmpID 的值将是 EmpID 本身。

请帮忙。

谢谢。

【问题讨论】:

  • 你的意思是如果 EmpInfo.EmpID = EmpMasterID.EmpID1 OR EmpInfo.EmpID = EmpMasterID.EmpID2 ?
  • 正确--这是一个错字...谢谢提问
  • 如果 EmpInfo.EmpID 在一行上匹配 EmpMasterID.EmpID1 并在另一行上匹配 EmpMasterID.EmpID2 并且这两行上的 AbsoluteEmpID 值不同,你想得到什么?
  • 你想要什么结果?对我来说,这个问题看起来像是AbsoluteEmpId 上的一个简单连接。
  • @rd_nielsen 好问题。我认为人们甚至不明白你想问什么。

标签: sql sql-server jointable


【解决方案1】:

这将加入EmpID1EmpID2。如果两者都失败了,left join 确保你得到一个带有 null 的行,然后你只需将 null 替换为 empid

select ei.EmpID, 
       ei.EmpFirstName, 
       ei.EmpLastName, 
       isnull(em.AbsoluteEmpID, ei.EmpID) as AbsoluteEmpID
from EmpInfo ei
left join EmpMasterID em on ei.empid = em.EmpID1 or ei.empid = em.EmpID2

【讨论】:

    【解决方案2】:

    应该基于内部连接

    update EmpInfo 
    INNER JOIN EmpMasterID On (EmpInfo.EmpID = EmpMasterID.EmpID1 
                               OR EmpInfo.EmpID = EmpMasterID.EmpID2)
    SET EmpID = AbsoluteEmpID
    

    【讨论】:

      【解决方案3】:

      你为什么不想要这个?

      SELECT ei.EmpID, ei.EmpFirstName, ei.EmpLastName, em.AbsoluteEmpID
      FROM EmpMasterID em JOIN
           EmpInfo ei
           ON ei.EmpID = ei.AbsoluteEmpID;
      

      我看不出OR 与这个查询有什么关系。

      【讨论】:

        猜你喜欢
        • 2021-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-04
        • 1970-01-01
        • 2012-12-03
        • 1970-01-01
        • 2018-03-23
        相关资源
        最近更新 更多