我有3個表,
- Section
表定義了一些常規項目部分。
- Category
表 - >有一個「部分」列(外鍵)。
- Product
表 - >有一個「類別」列(外鍵)。SQL查詢多表選擇
我想獲得屬於X部分的所有產品。
我該怎麼辦?
select from select?
我有3個表,
- Section
表定義了一些常規項目部分。
- Category
表 - >有一個「部分」列(外鍵)。
- Product
表 - >有一個「類別」列(外鍵)。SQL查詢多表選擇
我想獲得屬於X部分的所有產品。
我該怎麼辦?
select from select?
這裏同樣的答案很多。不過,由於某些原因,他們都加入了Section
表(可能不是必需的)。每@ nemiss要求
select
p.*
from
Product p,
Category c
where
p.category_id = c.id and
c.section_id = 123
;
明確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;
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'
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
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
是的!部分是沒有必要的!它只是定義有關該部分的信息,但不會影響我的查詢! – nemiss 2010-04-07 08:44:53
我不喜歡使用多表單(表格table1,表格2)可以改變使用連接嗎? – nemiss 2010-04-07 13:43:43
您不必加入部分,但通常不是基於ID直接查詢,而是根據行的某些特徵進行查詢。您的查詢更短,但更不靈活。如果FK關係沒有在數據庫中顯式強制執行,它也會受到影響,因爲在這種情況下,c.section_id可能包含不存在的值。 – 2010-04-07 14:20:56