用条件sql连接表

时间:2010-01-29 19:16:56

标签: sql

我有以下表格

table A

emp_code | emp_name

table B

emp_code | id

table C

emp_code | id

我想得到emp_name所以我这样做:

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

现在我想要捕获表B中的id不为null且大于0的情况,然后它应该将a.emp_code与表C中的emp_code进行比较(如SELECT c.emp_code FROM C c,B b WHERE c.id = b.id)否则按上述方式行事。

3 个答案:

答案 0 :(得分:2)

你可以UNION两个SELECTB上的第一个,不包括0或null的记录,第二个C,只包括B的记录}有0或null。

答案 1 :(得分:1)

很难说出你在寻找什么,但你可以从这里开始:

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

答案 2 :(得分:0)

您对所需内容的描述没有多大意义,所以我尝试了两个可能让您想要的不同查询(如果b有代码,您为什么需要c代码,那么您真的不想要b的代码吗?在那种情况下?):

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