【问题标题】:How to join two table based on condition?如何根据条件连接两个表?
【发布时间】:2015-02-25 10:09:49
【问题描述】:

一共有三个表A,B,C

一个表的列是名称、ID、地址

B表列是ID,Address,School

C表的列是School,address,cafe

如果名称='A' 然后表 A 和表 B 将根据 A.ID =B.ID 进行连接

如果名称='B'

那么表 A 和表 B 将根据 A.ID =B.ID 和 A.Address=B.Address 加入

这个结果与表 C 连接

【问题讨论】:

标签: sql-server sql-server-2008


【解决方案1】:

使用ORAND 运算符模拟ON 子句中的if 条件。试试这个Join

SELECT *
FROM   A
       INNER JOIN B
               ON ( A.name = 'A'
                    AND A.ID = B.ID )
                   OR ( A.Name = 'B'
                        AND A.ID = B.ID
                        AND A.Address = B.Address )
       INNER JOIN C
               ON B.school = C.school 

【讨论】:

    【解决方案2】:

    你可以试试下面的代码:

    SELECT * 
    FROM A
    INNER JOIN B 
      ON (   (B.Name = 'A' AND A.ID = B.ID) 
          OR (B.Name = 'B' AND A.ID = B.ID AND A.Address=B.Address)
         )
    

    您现在可以将结果与表 C 连接起来

    谢谢

    【讨论】:

      【解决方案3】:

      假设 A.Name 是 A 或 B:

      SELECT *
      FROM   A
        JOIN B ON ( A.ID = B.ID )
                  AND ( A.Name = 'A' OR A.Address = B.Address )
        JOIN C ON B.school = C.school 
      

      【讨论】:

        【解决方案4】:
        SELECT * FROM A INNER JOIN B
            ON A.ID = B.ID
            INNER JOIN C
            ON B.SCHOOL = C.SCHOOL
        WHERE A.NAME = 'A'
        UNION ALL
        SELECT * FROM A INNER JOIN B
            ON A.ID =B.ID and A.Address=B.Address
            INNER JOIN C
            ON B.SCHOOL = C.SCHOOL
            WHERE A.NAME = 'B'
        

        这可能有效

        【讨论】:

          猜你喜欢
          • 2016-11-18
          • 2021-11-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-11-30
          • 2020-12-02
          相关资源
          最近更新 更多