MySQL 在一个查询中使用多个联接来获取结果?

标签 mysql join

我有下表

tbl_user

uid     first_name      last_name       email_id
1       steve           martin          steve1@gmail.com
2       mark            lee             mark1@gmail.com
3       nelson          wise            nelson23@gmail.com

tbl_tier

tier_id     tier_name       points_required
1           Silver          100
2           Gold            200
3           Platinum            300

tbl_tier_earned

id      tier_id     uid
1       1           1
2       2           1
3       3           1
4       1           2
5       2           2
6       1           3

我需要当前级别的唯一用户,例如:

first_name          last_name       email_id                    current_tier
steve               martin          steve1@gmail.com            Platinum
mark                lee             mark1@gmail.com             Gold

我尝试了以下查询,但它只给了我 1 个结果:

SELECT u.first_name,u.last_name,u.email_id, t.tier_name 
FROM tbl_tier_earned AS tte 
INNER JOIN tbl_user AS u 
ON u.uid = tte.uid 
INNER JOIN tbl_tier AS t 
ON tte.tier_id = t.tier_id 
WHERE u.email_id!="" 
ORDER BY t.points_required DESC LIMIT 0,1

如何使用 mysql 查询检索以上数据?

最佳答案

看来当前等级是由每个用户的 tbl_tier_earned 表中的最大 tier_id 给出的。这里的一种方法是将用户表连接到 tbl_tier_earned 表上的子查询,该表查找最大层。

SELECT
    u.first_name,
    u.last_name,
    u.email_id,
    COALESCE(t2.tier_name, 'NA') AS current_tier
FROM tbl_user u
LEFT JOIN
(
    SELECT uid, MAX(tier_id) AS max_tier_id
    FROM tbl_tier_earned
    GROUP BY uid
) t1
    ON u.uid = t1.uid
LEFT JOIN tbl_tier t2
    ON t1.max_tier_id = t2.tier_id;

关于MySQL 在一个查询中使用多个联接来获取结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48860993/

相关文章:

php - 如何在php和mysql中使用数据库创建下载点击计数器?

php - 无法使用 netbeans 项目从 php 连接到 mysql

mysql - 将 2 个 select 语句重写为一个 JOIN 语句

php - 组合来自 3 个 php 应用程序的用户表

php - 外键为空时如何从连接中拉出行

php - 将大数据从txt插入到mysql

mysql - 任何值的 SQL WHERE 子句?

mysql - 多个 INNER JOIN SQL ACCESS SYNTAX

java - Spring数据加入多张表

java - 删除标题行 VAADIN 7.8.4