我有三张桌子。表d1和d2的结构几乎相同。
根据emp, d1, d2
表中d1
列的值,我需要使用d2
或deptno
来连接emp表。我编写的查询不起作用,并给出语法错误:
错误代码:1064
SQL语法中有错误;请查看手册
对应于MySQL服务器版本,以便使用“near”CASE的正确语法
SELECT
e.`empno`,
e.`ename`,
e.`job`,
e.`mgr`,
e.`hiredate`,
e.`sal`,
e.`comm`,
e.`deptno`
FROM
`emp` e
JOIN
CASE
WHEN e.deptno <= 20
THEN
d1 ON e.deptno = d1.`deptno`
ELSE
d2 ON e.deptno = d2.`deptno`
END;
最佳答案
不存在“有条件”联接。你可以:
SELECT e.*,
COALESCE(d1.col1, d2.col1) as col1
FROM emp e LEFT JOIN
d1
ON e.deptno = d1.deptno AND e.deptno <= 20 LEFT JOIN
d2
ON e.deptno = d2.deptno AND e.deptno > 20;
请注意,查询没有从
d1
或d2
中选择任何内容。从这个意义上说,根本不需要JOIN
。注意SELECT
中用于从列获取值的逻辑。如果使用联接进行筛选,请添加:
WHERE d2.deptno IS NOT NULL OR d1.deptno IS NOT NULL.
关于mysql - 有条件的联接以确定联接表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50564728/