2010-04-06 116 views
0

我有3個表,
- Section表定義了一些常規項目部分。
- Category表 - >有一個「部分」列(外鍵)。
- Product表 - >有一個「類別」列(外鍵)。SQL查詢多表選擇

我想獲得屬於X部分的所有產品。

我該怎麼辦?

select from select?

回答

0

這裏同樣的答案很多。不過,由於某些原因,他們都加入了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; 
+0

是的!部分是沒有必要的!它只是定義有關該部分的信息,但不會影響我的查詢! – nemiss 2010-04-07 08:44:53

+0

我不喜歡使用多表單(表格table1,表格2)可以改變使用連接嗎? – nemiss 2010-04-07 13:43:43

+0

您不必加入部分,但通常不是基於ID直接查詢,而是根據行的某些特徵進行查詢。您的查詢更短,但更不靈活。如果FK關係沒有在數據庫中顯式強制執行,它也會受到影響,因爲在這種情況下,c.section_id可能包含不存在的值。 – 2010-04-07 14:20:56

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' 
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 
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