当前位置: 首页 > 知识库问答 >
问题:

如何显示NULL或零从内部连接这两个表在两个不同的数据库?

勾渝
2023-03-14

我在两个不同的数据库上有两个表:

db1.1表1

+--------------+--------------------------+
| Username     | Message                  |
+--------------+--------------------------+
| jamesbond    | I need some help         |
| jamesbond    | I need some help         |
| jamesbond    | I need some help         |
| jamesbond    | Mission accomplished     |
+--------------+--------------------------+

db2.table2

+--------------------------+--------------+
| Message                  | Status       |
+--------------------------+--------------+
| I need some help         | Ok           |
| I need some help         | Ok           |
| I need some help         | Bad          |
+--------------------------+--------------+

当我使用以下SQL语法“内部联接”这些表时:

SELECT A.Username, A.Message
SUM(CASE WHEN `status` = 'Ok' THEN 1 ELSE 0 END) AS StatOK,
SUM(CASE WHEN `status` = 'Bad' THEN 1 ELSE 0 END) AS StatBAD
FROM db1.table1 as A
INNER JOIN db2.table2 as B 
ON A.Message = B.Message
WHERE A.Username = 'jamesbond'
GROUP BY A.Username, A.Message

我得到了这样的结果:

+--------------+--------------------------+--------+---------+
| Username     | Message                  | StatOK | StatBAD |
+--------------+--------------------------+--------+---------+
| jamesbond    | I need some help         | 2      | 1       |
+--------------+--------------------------+--------+---------+

如何获得这样的结果(DB2上没有状态的消息仍然会出现,但是SUM结果可以是零或空):

+--------------+--------------------------+--------+---------+
| Username     | Message                  | StatOK | StatBAD |
+--------------+--------------------------+--------+---------+
| jamesbond    | I need some help         | 2      | 1       |
| jamesbond    | Mission accomplished     | NULL   | NULL    |
+--------------+--------------------------+--------+---------+

共有1个答案

关冠宇
2023-03-14

您需要一个左外部联接,它将从左表中获取行,如果它与右表不匹配,您将得到NULL。

SELECT A.Username, A.Message
SUM(CASE WHEN `status` = 'Ok' THEN 1 ELSE 0 END) AS StatOK,
SUM(CASE WHEN `status` = 'Bad' THEN 1 ELSE 0 END) AS StatBAD
FROM db1.table1 as A
LEFT OUTER JOIN db2.table2 as B 
ON A.Message = B.Message
WHERE A.Username = 'jamesbond'
GROUP BY A.Username, A.Message
 类似资料:
  • 我正在开发一个基于SAAS的站点,我必须将两个DBs中的两个表连接起来,比如说DB1中的table1和DB2中的table2。我必须使用cakephp中的join从表1和表2获取匹配记录,但它会抛出如下错误: 错误:SQLSTATE[42000]:语法错误或访问冲突:1142 SELECT命令拒绝用户'dbname'@'localhost'访问表'table_name'。 有谁能解释一下如何使用c

  • 我有3个表格。 表: 列表模型: 列表迁移: 可为空! 表: 模型: 迁移: 表: 型号: 迁移: 表具有指向和的外键。两者的关系是一个城市或州与多个列表。 表也有外键并将一个州与多个城市联系起来。 我想从和中选择所有内容,并从listings表中计算每个城市/州的行数,我可以: 我所尝试的是: 问题是,我希望所有城市和州都在一个集合中,并为该城市/州提供另一个键/属性计数列表。 是城市还是州,没

  • 我有两个不同的服务器和,现在我有中的和中的。我试图加入这两个表在MySQL像这样。 但是我犯了一个错误。这在MYSQL中是可能的。

  • 我对MySQL和PHP非常陌生,我正在努力处理两个表之间的内部连接。我正在构建一个脚本,它读取一个os商务数据库,并告诉我哪些产品当前处于过期订单状态。为了使产品处于过期订单状态,products_attributes表中的值设置为'134',但是它只读取product_id,而不读取'products'表中的product_model。 我想在products_attributes表中选择值为'

  • 此时此刻,我不太确定如何处理这个问题。我还打算尝试使用外键。如有任何帮助,不胜感激。