我正在尝试以下代码,并希望从 table2 或 table3 中获取值,status1 值可能为空,也可能不为空,并且不会获得结果。
它仅显示来自表 2 的结果,而不显示来自表 3 的结果。
如果我删除“a.status1 LIKE b.status1”那么它工作正常。所有表中的 status1 均为空。
SELECT a.regno,
a.status1,
Coalesce(CASE
WHEN altervalue IS NOT NULL THEN altervalue
ELSE mastervalue
end, 0) AS value1
FROM table1 a
LEFT JOIN (SELECT reg_no, total1+total2 AS altervalue
FROM table2) AS i
ON `a`.`regno` LIKE `i`.`reg_no`
LEFT JOIN (SELECT regno, total1+total2 AS mastervalue,
status1
FROM table3) AS b
ON a.status1 LIKE b.status1
最佳答案
您没有使用通配符,因此可以使用 =
而不是 like
SELECT
a.regno,
a.status1,
Coalesce(CASE
WHEN altervalue IS NOT NULL THEN altervalue
ELSE mastervalue
end, 0) AS value1
FROM table1 a
LEFT JOIN (SELECT reg_no, total1+total2 AS altervalue
FROM table2) AS i ON `a`.`regno` = `i`.`reg_no`
LEFT JOIN (SELECT regno, total1+total2 AS mastervalue,
status1
FROM table3) AS b ON a.status1 = b.status1
或空安全比较
SELECT
a.regno,
a.status1,
Coalesce(CASE
WHEN altervalue IS NOT NULL THEN altervalue
ELSE mastervalue
end, 0) AS value1
FROM table1 a
LEFT JOIN (SELECT reg_no, total1+total2 AS altervalue
FROM table2) AS i ON `a`.`regno` = `i`.`reg_no`
LEFT JOIN (SELECT regno, total1+total2 AS mastervalue,
status1
FROM table3) AS b ON a.status1 <=> b.status1
关于mysql select 查询错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47113377/