SQL查询多表选择

时间:2010-04-06 21:01:44

标签: sql

我有3张桌子,
- Section表定义了一些常规项目部分 - Category表格 - >有一个“部分”栏(外键)。
- Product表格 - >有一个“类别”列(外键)。

我想获得属于X部分的所有产品。

我该怎么办?

从选择中选择?

4 个答案:

答案 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;