我有3张桌子,
- Section
表定义了一些常规项目部分
- Category
表格 - >有一个“部分”栏(外键)。
- Product
表格 - >有一个“类别”列(外键)。
我想获得属于X部分的所有产品。
我该怎么办?
从选择中选择?
答案 0 :(得分:4)
Select
prod.*
FROM
Product prod
INNER JOIN Category cat ON prod.category = cat.id
INNER JOIN Section sec ON cat.section = sec.id
WHERE
sec.id = X
答案 1 :(得分:0)
select s.section, p.*
from section s
inner join category c on c.section = s.section
inner join product p on p.category = c.category
where s.section = 'section1'
答案 2 :(得分:0)
select p.*
from Product p
join Category c on p.CategoryId = c.Id
join Section s on c.SectionId = s.Id
where s.Id = @val
答案 3 :(得分:0)
这里有很多相同的答案。但是,出于某种原因,所有人都加入了Section
表,这可能是(可能)没有必要的。
select
p.*
from
Product p,
Category c
where
p.category_id = c.id and
c.section_id = 123
;
每个@ nemiss的请求显式ANSI JOIN
语法:
select
p.*
from Product p
join Category c
on c.id = p.category_id
and c.section_id = 123
;
包含Section
表的可能原因:根据部分名称(而不是ID)选择产品。
select
p.*
from Product p
join Category c
on c.id = p.category_id
join Section s
on s.id = c.section_id
and s.name = 'Books'
;
如果这样做,您需要确保Section.name
已编入索引
alter table Product add index name;