我使用的是mysql,有两个表user和result。
`user` `result`
--------------------------- -------------------------------------
| `id` | `name` |`active`| | `id` |`user_id` |`status`|`identity`|
-------------------------- ------------------------------------
| 1 | Apia | 1 | | 1 | 1 | 2 | 1 |
| 2 | Tang | 1 | | 2 | 1 | 2 | 1 |
| 3 | Jemrom | 1 | | 3 | 2 | 1 | 1 |
| 4 | Akwet | 1 | | 4 | 5 | 3 | 1 |
| 5 | Lamte | 1 | -------------------------------------
---------------------------
所以结果应该是这样的:
------------------------------
| `name` |`active` |`status` |
------------------------------
| Apia | 1 |`passed` |
| Tang | 1 |`passed` |
| Akwet | 1 |`awaiting`|
| Lamte | 1 |`failed` |
| Jerome | 1 |`unavailable` |
------------------------------
到目前为止,我已经:
SELECT u.*,
r.status
FROM user u
LEFT JOIN result r
ON r.user_id = u.id
WHERE u.active = 1;
但是我不知道如何为结果表方面编写查询。
注意:对于结果表中的状态(1=等待,2=通过,3=失败)
我想使用left join从user表中选择所有内容,其中active=1(按名称排序),并与identity=1的结果表中的相关user\u id匹配。结果表必须按用户id分组。如果用户在结果中没有数据,则应显示不可用状态,而不是null。
如何在mysql中编写这个查询?
谢谢
1条答案
按热度按时间but5z9lq1#
你好像想要一个
left join
和聚合。您的问题不清楚当一个用户有多个结果时,您希望如何计算状态,因此我假设您希望获得最大值:请注意
user
是mysql(以及大多数其他数据库)中的语言关键字,因此表名的选择很差。我把它改名为users
在查询中。