我有五個表「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
我有五個表「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
可以使用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
等等等等。儘管您可能會考慮重新構建數據的存儲方式,以使這種事情更容易。
'WHERE'子句只需要在'UNION ALL'的每個部分中有一個條件而不是5。 – 2011-05-15 16:25:51
是的,那樣會更好,改變答案以反映這一點。 – zellio 2011-05-15 16:27:16
如果所有表格都存儲不同類別的書籍,則將它們合併成一張表格並添加一個「類別」列。由於您已經演示的原因,將這些分類到不同的表格中並不是一個好主意。
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
@Archi - 你找到答案了嗎? – 2011-05-18 17:42:44
你需要一個'UNION ALL'而不是'JOIN',但它看起來不像我正確的結構。如果您希望允許跨多個流派的書籍,那麼爲什麼不用一張表格來顯示流派的專欄或單獨的結合表格? – 2011-05-15 16:22:14