我正在使用SQL Server 2005 我有一个T-Sql查询,有多个条件来搜索WHERE子句。 我确信我这样做是非常低效和长期的。 如何确保我不必手动输入所有条件? 相反,我想通过SELECT *子句传递标准。
SELECT * FROM tblBooks
WHERE BookID = 1
OR BookID = 4
OR BookID = 5
OR BookID = 7
OR BookID = 8
OR BookID = 11
OR BookID = 14
SELECT * FROM tblBooks
WHERE BookID = (SELECT BookID FROM tblAuthors WHERE Genre = 'Fiction')
从提议的伪代码中可以看出,我们的想法是从另一个查询中选择一个BookID列表,并将这个条件列表传递给实际的查询本身。 我该怎么做呢?
非常感谢。
答案 0 :(得分:3)
SELECT * FROM tblBooks
WHERE BookID in (SELECT BookID FROM tblAuthors WHERE Genre = 'Fiction')
如果book id在那里,这将返回表tblAuthors中的所有数据
答案 1 :(得分:3)
你的伪代码,不是太伪了。将=更改为IN和完成。
SELECT * FROM tblBooks
WHERE BookID IN (SELECT BookID FROM tblAuthors WHERE Genre = 'Fiction')
答案 2 :(得分:2)
使用联接:
SELECT b.*
FROM tblBooks b
INNER JOIN
tblAuthors a
ON b.BookID = a.BookID
WHERE a.Genre = 'Fiction'
我认为这些不是你真正的桌子吗?我不明白为什么Genre属性不在书本身上。许多作者都写过多种类型(以Iain Banks为例)。
答案 3 :(得分:0)
只是抛出替代品:
SELECT tblBooks.*
FROM tblBooks
WHERE EXISTS (SELECT *
FROM tblAuthors
WHERE tblBooks.BookID = tblAuthors.BookID
AND tblAuthors.Genre = 'Fiction');
SELECT tblBooks.*
FROM tblBooks
WHERE tblBooks.BookID = ANY
(SELECT tblAuthors.BookID
FROM tblAuthors
WHERE tblAuthors.Genre = 'Fiction');