我有两张表。我想以一种方式将它们加入,即最左侧表中的每个记录只返回右侧表中的一个记录。我在下面提供了一个示例。我想避免使用子查询和临时表,因为实际数据约为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 | ---------------------
使用:
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