我有三张桌子。表d1和d2的结构几乎相同。
根据emp, d1, d2表中d1列的值,我需要使用d2deptno来连接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;

请注意,查询没有从d1d2中选择任何内容。从这个意义上说,根本不需要JOIN。注意SELECT中用于从列获取值的逻辑。
如果使用联接进行筛选,请添加:
WHERE d2.deptno IS NOT NULL OR d1.deptno IS NOT NULL.

关于mysql - 有条件的联接以确定联接表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50564728/

10-10 16:08