2013-03-28 125 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