【问题标题】:MySQL not return result when key id is not found未找到密钥 ID 时 MySQL 不返回结果
【发布时间】:2012-11-10 06:38:24
【问题描述】:

我有几行 mySQL 代码来显示一组与两个表相关联的结果。通过密钥 ID 关联。当没有键匹配另一个表时会出现问题 - 没有结果显示。所以我的想法是我想在 mySQL 中有一些条件,比如 if(id='999','General','concat(something with no inner join))。请看一下我的代码:

MySQL

SELECT if( log_db.log_bid = '999', 'General', 
CONCAT( 'B', bk_rtype, '-', LPAD( bk_id, 5, '0' ) ) ) AS booking_no,
 booking_db.bk_flg1 AS flight
FROM log_db
INNER JOIN booking_db ON booking_db.bk_id = log_db.log_bid
WHERE log_db.log_stts = '1'
ORDER BY log_db.log_id DESC

根据我的代码。我希望如果 log_bid='999' a booking_no 应该返回 'General' 但它不会。请提出建议。

【问题讨论】:

  • 根据定义,INNER JOIN ... ON 需要两个表中的匹配项。我不遵循您要执行的操作,但听起来您可能想要使用常规联接,因此如果一个表没有匹配的记录,您仍然会得到结果,然后可能使用 COALESCE 来处理null 值。

标签: mysql key inner-join


【解决方案1】:

听起来你想要这样的 LEFT OUTER JOIN。

SELECT log_db.log_bid,
   CASE WHEN booking_db.bk_id IS NULL THEN 'General' 
   ELSE CONCAT( 'B', bk_rtype, '-', LPAD( bk_id, 5, '0' ) ) END AS booking_no,
   booking_db.bk_flg1 AS flight
FROM log_db
LEFT OUTER JOIN booking_db ON booking_db.bk_id = log_db.log_bid
WHERE log_db.log_stts = '1'
ORDER BY log_db.log_id DESC

这将为您提供第一个表中与您的 where 条件相匹配的所有记录,并与第二个表中的记录相结合(如果未找到匹配项,则为空记录)。

【讨论】:

    猜你喜欢
    • 2021-09-11
    • 2011-10-27
    • 2017-08-23
    • 2018-04-09
    • 1970-01-01
    • 2021-04-06
    • 1970-01-01
    • 1970-01-01
    • 2019-09-01
    相关资源
    最近更新 更多