2015-01-06 63 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