mysql返回默认值,即使join不返回任何记录

标签 mysql left-join inner-join default

我有 4 个表,我使用下面的查询加入这些表。鉴于我的以下数据,它实际上不会返回任何数据,因为 TRANSACTION_LINE 中没有行对象类型值为 6 的记录。

如果查询未返回任何记录,我希望此查询从 EX_WORK 返回默认值 key_1,空 line_Id,TENDER_CODE 上的默认值“OFF”。

我已经尝试过 coalesce 和 ifnull,但似乎没有用。可以通过左连接而不是内部连接来解决这个问题吗?

谢谢!

SELECT  w.key_1 as if_entry_no, 
           l.line_id as line_id, 
           o.object_export_code as tender_code
      FROM EX_WORK w,
           transaction_header h, 
           transaction_line l, 
           line_object o 
     WHERE w.key_1 = h.if_entry_no
       AND h.transaction_void_flag in (0,8)
       AND h.if_entry_no = l.if_entry_no
       AND l.line_object_type = 6
       AND l.line_action <> 55 
       AND (l.line_action <> 72 OR h.tender_total = 0)  
       AND l.line_object = o.line_object

EX_WORK
serial_no   key_1   
111         2879051 

TRANSACTION_HEADER
if_entry_no store_no transaction_void_flag tender_total
2879051     9500     0                     0

TRANSACTION_LINE
if_entry_no line_Id line_object_type line_object line_action
2879051     1       14               9109        38
2879051     2       1                9105        99
2879051     3       5                9501        98
2879051     4       11               9111        46

LINE_OBJECT
line_object line_object_type    resource_id object_export_code
9105        1                   5529        null
9109        1                   5533        null
9111        1                   5535        null
9501        1                   5709        null

最佳答案

是的,您需要左连接。像这样:

SELECT if_entry_no, line_id, ifnull(o.object_export_code, "OFF") AS tender_code
FROM (SELECT w.key_1 AS if_entry_no, l.line_id AS line_id, l.line_object
      FROM EX_WORK w,
           transaction_header h,
           transaction_line l,
           line_object o
      WHERE w.key_1 = h.if_entry_no
        AND h.transaction_void_flag IN (0, 8)
        AND h.if_entry_no = l.if_entry_no
        AND l.line_object_type = 6
        AND l.line_action <> 55
        AND (l.line_action <> 72 OR h.tender_total = 0)) s
       LEFT JOIN line_object o ON s.line_object = o.line_object;

关于mysql返回默认值,即使join不返回任何记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48968727/

相关文章:

sql - 如何在 Firebird 的两个不同表中获得两个不同的总数? (使用左外连接连接 3 个表)

mysql左外连接

SQL 内连接 : ORDER BY LIMIT duplicates from one table

php - Mysql INNER JOIN 非常慢

mysql - 为什么单个 SET 查询和几个适当的单独 SET 查询不等价?

MySQL:查询以获取数据库中每个表的计数?

PHP 将表单数据发送到数据库时出错

php - CodeIgniter GROUP_CONCAT 并加入

MYSQL根据多个连接选择新列

sql - oracle sql中通过表达式进行内部连接