SQL Join涉及3个表,怎么样?

时间:2016-05-06 06:44:26

标签: mysql sql join

SQL新手在这里。

所以我们有3个表:

categories(cat_id,name);   
products(prod_id,name);
relationships(prod_id,cat_id); 

这是一对多的关系。

所以,给定一个类别名称说“书籍”。如何查找书籍下的所有产品?

举个例子,

categories(1,Books);  
categories(2,Phones);  
products(302,Sherlock Holmes);  
relationships(302,1);  

4 个答案:

答案 0 :(得分:4)

您需要JOIN三个表格。

SELECT  p.*
FROM relationships r
INNER JOIN products p
    ON p.prod_id = r.prod_id
INNER JOIN categories c
    ON c.cat_d = r.cat_id
WHERE c.name = 'Books'

答案 1 :(得分:2)

您必须连接相关列上的表并指定WHERE子句以选择类别名称= 'Books'

的所有记录
SELECT p.*
FROM categories c
JOIN relationships r ON c.cat_id = r.cat_id
JOIN products p ON r.prod_id = p.prod_id
WHERE c.name = 'Books' -- or specify parameter like @Books

答案 2 :(得分:1)

在SQL中,您经常加入相关的表,初学者倾向于加入,无论情况如何。我不会推荐这个。在您的情况下,您想要选择产品。如果您只想显示产品数据,请仅从产品中进行选择。您希望选择 类别“图书”(或存在类别'图书'中的条目)的产品。因此,使用INEXISTS子句来查找它们:

select * from products
where prod_id in
(
  select prod_id
  from relationships
  where cat_id = (select cat_id from categories where name = 'Books')
);

因此,您可以轻松地获得一个结构良好的查询,告诉读者如何关联表以及您实际感兴趣的数据。稍后,使用不同的表和数据进行选择,这可能使您不必重复结果行通过使用DISTINCT或从错误的聚合(总和,计数等)中摆脱,因为错误地将记录多重考虑。

答案 3 :(得分:0)

试试这个:

select p.Prod_id,p.name 
from products p inner join relationships r on 
p.prod_id = r.prod_id
where r.cat_id = (select cat_id from categories where name = 'books')

select p.Prod_id,p.name 
from products p inner join relationships r on 
p.prod_id = r.prod_id inner join categories c on c.cat_id = r.cat_id
where c.name = 'books'