首页 > 解决方案 > Sql 语句从两个不同的表中获取信息

问题描述

我有两张桌子,一张叫参与者_tb,另一张叫分配_tb。在参与者_tb上,我的列是参与者 ID名称用户名。在allocation_tb 下,我的列是allocation_idsender_usernamereceiver_usernamedonedone列包含以下三个数字中的任何一个:0、1、2。

我使用这个 sql 语句来获取我的值

SELECT *, COUNT(done) d
FROM participants_tb 
JOIN allocation_tb ON (username=receiver_username)
WHERE done = 0 || done = 1 
GROUP BY receiver_username

它工作得很好,我遇到的问题是,我希望它还包括在参与者_tb 中但不在分配_tb 中的参与者的信息。我尝试使用左外连接,但它没有按预期工作,因为我希望它包含仅在参与者 tb 中但不在分配 tb 中的参与者,因为 where 子句中的完成在分配 tb 中,它不会包括那些信息。

标签: mysqlsql

解决方案


你似乎想要:

SELECT p.*, COUNT(a.done) as d
FROM participants_tb p LEFT JOIN
     allocation_tb a
     ON p.username = a.receiver_username) AND
        a.done IN (0, 1)
GROUP BY p.participant_id;

笔记:

  • LEFT JOIN保留所有参与者。
  • GROUP BY需要在第一张桌子上。
  • 您可以使用SELECT p.*--GROUP BY假设GROUP BY键是唯一的(或主键)。
  • 所有列都应该是合格的。
  • IN是一种更简单的方式来表达你的逻辑。

推荐阅读