2013-03-28 103 views
2

我怎麼能寫出以下加入3表多對多的關係單個查詢

一個MySQL查詢我有3個表

我知道登錄user_id爲25

Users(id,first_name,last_name)

userproduducts(user_id,product_id)

Product(id,title,description,price)

userproducts是一個多對多的解決表

我怎麼可以編寫一個查詢,將讓我的first_namelast_name用戶與id=25和產品的產品表得到的一切,其中user_id = 25在userproducts表?

謝謝

回答

5

一個簡單明瞭JOIN會給你想要的東西:

SELECT 
    u.first_name, 
    u.last_name, 
    p.* 
FROM users    As u 
INNER JOIN userproducts AS up ON up.user_id  = u.id 
INNER JOIN product  AS p ON up.product_id = p.id 
WHERE u.id = 25; 
+0

對不起馬哈茂德它沒有工作,請注意,它是25 – Almanzt 2013-03-28 10:29:16

+0

第一個加入是錯誤的user_ID的,應當對up.user_id = u.id. – 2013-03-28 10:35:16

+0

謝謝PETER WOOSTER現在正在工作 – Almanzt 2013-03-28 10:42:10

2

試試這個

SELECT 
ut.first_name, 
ut.last_name, 
pt.* 
FROM users    As ut 
INNER JOIN userproducts AS upro ON upro.user_id  = ut.id 
INNER JOIN product  AS pt ON upro.product_id = pt.id 
WHERE ut.id = 25; 
+0

'on子句'中的未知列'ut.user_id'這是收到的錯誤 – Almanzt 2013-03-28 10:37:05

+0

@ user2154840現在嘗試.. – alwaysLearn 2013-03-28 10:41:38

+0

這是本網站快速解答的一個問題,他們需要進行一些編輯得到正確。這最後看起來是正確的。 OP應該看後面的答案,他們有時寫得比那些比賽首先要更加謹慎。 – 2013-03-28 10:43:08

2

這是通過兩個連接完成。如果您想要獲得沒有產品的用戶,它們應該是LEFT JOINS。

SELECT u.first_name, u.last_name, p.* 
FROM users u 
LEFT JOIN userproducts up ON u.id = up.user_id 
LEFT JOIN product on up.product_id = p.id 
WHERE p.id = 25 

如果沒有產品,產品信息將爲空。如果您不想要空產品,請使用INNER JOIN,也就是前面的答案中的JOIN。

SELECT u.first_name, u.last_name, p.* 
FROM users u 
JOIN userproducts up ON u.id = up.user_id 
JOIN product on up.product_id = p.id 
WHERE p.id = 25