代码之家  ›  专栏  ›  技术社区  ›  Vishal

用条件sql连接表

sql
  •  0
  • Vishal  · 技术社区  · 16 年前

    table A
    
    emp_code | emp_name
    
    table B
    
    emp_code | id
    
    table C
    
    emp_code | id
    

    我想得到emp_的名字,所以我:

    SELECT a.emp_name 
      FROM A a, B a 
     WHERE a.emp_code = b.emp_code
    

    现在我想捕获一个例子,当表B中的id不为null且大于0时,它应该将a.emp_代码与表C中的emp_代码进行比较(如从C中选择C.emp_代码,其中C.id=B.id),否则如上所述。

    3 回复  |  直到 16 年前
        1
  •  2
  •   Carlos Gutiérrez    16 年前

    UNION 二 SELECT s、 第一个 B 不包括0或null的记录,第二个为on C 仅包括以下记录: B 具有0或null。

        2
  •  1
  •   Cade Roux    16 年前

    SELECT *
           ,COALESCE(c.id, b.id) AS chosen_id
    FROM A AS a
    LEFT JOIN B AS b
        ON a.emp_code = b.emp_code 
    LEFT JOIN C AS c
        ON c.emp_code = a.emp_code
        AND b.id IS NOT NULL
        AND b.id > 0
    
        3
  •  0
  •   HLGEM    16 年前

    SELECT a.emp_name , case when b.emp_code >0 or b.id is not null then c.emp_code, else b.emp_code end as emp_code 
    FROM A a
    LEFT JOIN B b 
        ON a.emp_code = b.emp_code 
    LEFT JOIN C c 
        ON c.emp_code = b.emp_code 
    
    SELECT a.emp_name , case when b.emp_code <0 or b.emp_code is null then c.emp_code, else b.emp_code end as emp_code 
    FROM A a
    LEFT JOIN B b 
        ON a.emp_code = b.emp_code 
    LEFT JOIN C c 
        ON c.emp_code = a.emp_code