我有以下表格
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)否则按上述方式行事。
答案 0 :(得分:2)
你可以UNION
两个SELECT
,B
上的第一个,不包括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