2015-01-06 65 views
1

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

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

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

所以为了简化,这里有我需要采取的步骤:

  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'列上的两个表,但每个用户只显示1行。它只选择有多个产品注册的用户。

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

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

回答

1

更换cpr.*, c.*与要提取feom查询

尝试此列:

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; 
+0

返回一个空的结果。那么我应该有2个内部联接吗?我可以没有吗? – Bravi

+0

好吧,我现在要做。谢谢 – Bravi

+0

http://sqlfiddle.com/#!2/59078是sqlfiddle。我创建了2个用户名 - user1和user2。 user1在coffee_product_registrations下注册了2个产品,user2只有1个。因此,查询应选择user1的所有产品,并显示除user1的电子邮件和ID之外的两个产品。 – Bravi