mysql - 如何将 Select 和 Join select 连接到单个查询中

标签 mysql sql join

我的查询中有 2 个选择语句、一个聚合计数和一个左联接,它组合了 2 个表以提供一些我无法通过其他方式访问的信息。我知道我可以创建一个临时表作为这两个查询,然后将它们连接到一个公共(public)行上,在本例中就是用户 ID。我只是想知道是否有一种方法可以在一个查询中完成此操作。

我的查询如下:

SELECT usr, COUNT( quiz_id )
AS count
FROM edo_plugin_slickquiz_scores
WHERE usr_practice = 123456 
GROUP BY usr;

给我以下内容

USR    COUNT 
 6      1
 7      1

我的第二个查询

SELECT a.user_id, a.meta_value, b.user_nicename
FROM edo_usermeta a LEFT JOIN edo_users b 
ON a.user_id = b.id
WHERE a.meta_key = 'user_practice_role';

给我以下内容

User_id  meta_value   user_nicename
-----------------------------------  
  6   |    5    |    richbai90
  5   |    1    |    hi5
  8   |    0    |    man
  7   |    1    |    testing123

由于 WordPress 设置用户元表的方式,最后的 WHERE 子句是绝对必要的。如果您熟悉 WordPress,您就会明白该表如下所示

umeta_id   user_id        meta_key      meta_value
--------------------------------------------------  
  1     |    1  |     first_name  |  bob    
  2     |    1  |     last_name   |  builder
  3     |    1  |     nickname    |  bob

所以我只想要这个表中的值,其中meta_key = to user_practice_role

我理解的方式是最好的方式吗?

最佳答案

据我所知,您根本不需要临时表,您只需在第二个查询中再使用一个联接即可:

SELECT  a.user_id, a.meta_value, b.user_nicename, COUNT(sc.quiz_id) AS Quizes
FROM    edo_usermeta a 
        LEFT JOIN edo_users b 
            ON a.user_id = b.id
        LEFT JOIN edo_plugin_slickquiz_scores sc
            ON sc.usr = b.id
            AND sc.usr_practice = 123456 
WHERE   a.meta_key = 'user_practice_role'
GROUP BY a.user_id, a.meta_value, b.user_nicename;

关于mysql - 如何将 Select 和 Join select 连接到单个查询中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17325117/

相关文章:

mysql - 从 Mysql 表中选择非空值

mysql - SQLZoo 中 SQL Join #13 的解决方案

php - 无法使用 img PHP 从数据库中删除行

php - 如何让这个 while 循环动态生成这个 html?

sql - INNER JOIN 查询使用三个表返回符合条件的行的计数和总和

sql - 具有不同数据的数据库对象

sql - 检查 SQL Server 中是否不存在值

mysql - 字段之间的共同值

mysql - 在日期范围内加入 MySQL

mysql - 如何在 MySQL 中获取最后三行