mysql select 查询错误

标签 mysql sql

我正在尝试以下代码,并希望从 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/

相关文章:

php - array_push() 与 $array[] = .... 哪个最快?

sql - 删除给定日期内的重复行组合

sql - 我如何优化这个缓慢的 PostgreSQL 查询

php 无法在 Linux 服务器上的 mysql 查询中使用撇号

mysql - Codeigniter 子查询

php - SQL中的控制流问题

mysql - 处理 php 和 sql 中的新行

mysql - SQL:无法使用子查询中父查询的引用使用 datediff 或 date_add 来过滤行

mysql - 将 IPv4 和 IPv6 地址存储在单个列中

html - 在 mysql 中删除所有 anchor 标记和其中的任何内容