在mysql中使用JOIN和子查询

时间:2015-01-06 13:09:35

标签: mysql sql sql-server select join

我在2周前发布了一个关于SQL表之间“一对多”关系的问题。现在我有一个不同的场景。基本上,有两个表 - coffee_users和coffee_product_registrations。后者通过'uid'列连接到coffee_users表。所以基本上就是coffee_users.uid = coffee_product_registrations.uid

单个用户可以注册多个产品。

我想要做的是显示一些产品信息(来自coffee_product_registrations)以及一些用户信息(来自coffee_users),但只检索那些产品注册数超过1的行。

简而言之,以下是我需要采取的步骤:

  1. 加入两张桌子
  2. 选择已注册多个产品的用户
  3. 显示所有产品及其名称和内容
  4. 我当前的SQL查询如下所示:

    SELECT c.uid, c.name, cpr.model 
    FROM coffee_users c 
    JOIN coffee_product_registrations cpr on c.uid = cpr.uid
    GROUP BY c.uid 
    HAVING COUNT(cpr.uid) > 1
    

    这会将'uid'列上的两个表连接起来,但每个用户只显示一行。它仅选择已注册多个产品的用户。

    现在我需要获取这些ID并根据它们从coffee_product_registrations中选择所有产品。

    我无法弄清楚如何将它放在一个查询中。

1 个答案:

答案 0 :(得分:1)

cpr.*, c.*替换为您要从查询中提取的列

试试这个:

SELECT cpr.*, c.*
FROM coffee_product_registrations cpr 
INNER JOIN coffee_users c ON c.uid = cpr.uid
INNER JOIN (SELECT cpr.uid 
            FROM coffee_product_registrations cpr 
            GROUP BY cpr.uid 
            HAVING COUNT(DISTINCT cpr.productId) > 1
           ) AS A ON c.uid = A.uid;