2011-05-15 110 views
3

我有五個表「ArtBook,Eng,comm,Law,mgt」,每個表都有相同的列,我想搜索所有的信息,特定書的編號爲 eg-存儲過程的sql查詢

select * from ArtBook,Eng,Comm,Law,mgt where @BookId=ArtBooks.BookId 
or @BookId=CommBooks.BookId 
or @BookId=Eng.BookId 
or @BookId=Law.BookId 
or @BookId=mgt.BookId 
+3

你需要一個'UNION ALL'而不是'JOIN',但它看起來不像我正確的結構。如果您希望允許跨多個流派的書籍,那麼爲什麼不用一張表格來顯示流派的專欄或單獨的結合表格? – 2011-05-15 16:22:14

回答

0

可以使用UNION或UNION ALL運算符。

(SELECT * FROM ArtBook) 
UNION ALL 
(SELECT * FROM Eng) 
... 
WHERE @BookId=ArtBooks.BookId or 
     @BookId=CommBooks.BookId or 
     @BookId=Eng.BookId or 
     @BookId=Law.BookId or 
     @BookId=mgt.BookId 

等等等等。儘管您可能會考慮重新構建數據的存儲方式,以使這種事情更容易。

+0

'WHERE'子句只需要在'UNION ALL'的每個部分中有一個條件而不是5。 – 2011-05-15 16:25:51

+0

是的,那樣會更好,改變答案以反映這一點。 – zellio 2011-05-15 16:27:16

3

如果所有表格都存儲不同類別的書籍,則將它們合併成一張表格並添加一個「類別」列。由於您已經演示的原因,將這些分類到不同的表格中並不是一個好主意。

1
select * 
from ArtBook 
where BookId = @BookId 
union all 
select * 
from Eng 
where BookId = @BookId 
union all 
select * 
from Comm 
where BookId = @BookId 
union all 
select * 
from Law 
where BookId = @BookId 
union all 
select * 
from Mgt 
where BookId = @BookId 
+0

@Archi - 你找到答案了嗎? – 2011-05-18 17:42:44