Jim*_*Jim 5 mysql sql join relational-algebra left-join
我不清楚如果您尝试 JOIN 可能为 NULL 的列,那么 LEFT JOIN 的行为是什么。
例如
SELECT columns
FROM
EmployeePayment ep JOIN EmployeePaymentGroup g ON g.group_id = ep.group_id AND g.subsidiary_id = ep.subsidiary_id
LEFT JOIN EmployeeSalaryDetails esd USING (department_id)
LEFT JOIN Employee e ON e.id = esd.emp_id
Run Code Online (Sandbox Code Playgroud)
如果EmployeePayment 和 EmployeePaymentGroup 的 INNER JOIN 返回 1 条记录,然后EmployeeSalaryDetails 上的第二个 LEFT JOIN 保留该记录,但该记录具有 esd.emp_id 的 NULL 值,并尝试在该 NULL 值上对 Employee 进行 LEFT JOIN,会发生什么情况。
我知道 NULL 很棘手,所以我想知道 LEFT JOIN 如何处理 NULL
注意:
我之前提出了一个关于 JOIN 的问题,但是 Abhik Chakraborty 的评论让我意识到条件中的 NULL 值存在问题
如果您有一个LEFT JOIN并且右表不返回任何内容 ( NULL),则投影中属于右表的所有字段都是简单的NULL,但您仍然可以从左表中获得结果。RIGHT JOIN具有相反的行为并且INNER JOIN不会返回任何内容。
SELECT * FROM `left_table` LEFT JOIN `right_table`\nRun Code Online (Sandbox Code Playgroud)\n\nNULL = NULL计算结果为UNKNOWN(这意味着 \xe2\x80\x9cno,不要 \xe2\x80\x99t 加入,因为我不知道是否允许这样做。\xe2\x80\x9d)并且投影将仅包含左表的结果。
当然,有一些方法可以解决这个问题:
\n\nSELECT *\nFROM `left_table` AS `l`\n LEFT JOIN `right_table` AS `r`\n ON `r`.`id` <=> `l`.`id`\nRun Code Online (Sandbox Code Playgroud)\n\n现在,检查NULL将按照您习惯的方式正常工作(NULL <=> NULLis1和\'value\' <=> NULLis 0)。另请参阅等于运算符的文档。