我有五个表“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