admin

对于最左边的表中的每一行,仅从最右边的表返回一行

sql

我有两张表。我想以一种方式将它们加入,即最左侧表中的每个记录只返回右侧表中的一个记录。我在下面提供了一个示例。我想避免使用子查询和临时表,因为实际数据约为4M行。我也不在乎最右边表中的哪条记录被匹配,只要一个或一个都不匹配即可。谢谢!

表用户:

-------------
| id | name |
-------------
| 1  | mike |
| 2  | john |
| 3  | bill |
-------------

表交易:

---------------
| uid | spent | 
---------------
| 1   | 5.00  |
| 1   | 5.00  |
| 2   | 5.00  |
| 3   | 5.00  |
| 3   | 10.00 |
---------------

预期输出:

---------------------
| id | name | spent |
---------------------
| 1  | mike | 5.00  |
| 2  | john | 5.00  |
| 3  | bill | 5.00  |
---------------------

阅读 152

收藏
2021-05-10

共1个答案

admin

使用:

  SELECT u.id,
         u.name,
         MIN(t.spent) AS spent
    FROM USERS u
    JOIN TRANSACTIONS t ON t.uid = u.id
GROUP BY u.id, u.name

请注意,这只会返回至少具有一个TRANSACTIONS记录的用户。如果要查看没有支持记录的用户以及有支持记录的用户,请使用:

   SELECT u.id,
          u.name,
          COALESCE(MIN(t.spent), 0) AS spent
     FROM USERS u
LEFT JOIN TRANSACTIONS t ON t.uid = u.id
 GROUP BY u.id, u.name
2021-05-10