【发布时间】:2011-03-19 19:43:59
【问题描述】:
我有两张桌子。我想以这样一种方式加入它们,即最左边表中的每条记录只返回右表中的一条记录。我在下面提供了一个示例。我想避免子查询和临时表,因为实际数据约为 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 |
---------------------
【问题讨论】:
-
为什么每个人都按 user.id(主键)和 user.name 分组?按主键分组后,您真的不需要其他任何东西。是我遗漏了什么,还是我们都只是抄袭@OMG Ponies?
-
@TheJacobTaylor:标准 SQL 要求您在 GROUP BY 中包含未包装在聚合中的列。如果涉及到不必要的子分组,ANSI 标准不支持定义所有列 - MySQL 支持这一点,但它不适用于大多数其他数据库。
-
@TheJacobTaylor:MySQL 不需要所有的分组列;几乎所有其他 DBMS 都这样做,SQL 标准也是如此。
-
太好了,谢谢!这是我倾向于尝试运行、阅读错误、拍前额、调整查询并再次运行的事情之一。