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