Sql 从表中选择匹配行,其中两列之一包含值列表中的任何值
您能帮我查询Microsoft SQL Server 2012数据库的SQL吗?我有这样一个表结构:Sql 从表中选择匹配行,其中两列之一包含值列表中的任何值,sql,sql-server,sql-server-2012,Sql,Sql Server,Sql Server 2012,您能帮我查询Microsoft SQL Server 2012数据库的SQL吗?我有这样一个表结构: User ---------------------- Id int UserName nvarchar Likeable --------------------- Id int Name nvarchar UserLike ---------------------- Id int UserId in
User
----------------------
Id int
UserName nvarchar
Likeable
---------------------
Id int
Name nvarchar
UserLike
----------------------
Id int
UserId int
LikeableId int
Book
-----------------------
Id int
Name nvarchar
Author nvarchar
Description nvarchar
AmazonUrl nvarchar
因此,为了获得用户喜欢的东西的名称,我使用以下查询:
SELECT Name
FROM [User] u JOIN UserLike ul ON u.Id = ul.UserId
JOIN Likeable l ON l.Id = ul.LikeableId;
让我们将该查询称为查询1
查询1的结果:
我想要什么:
现在,我想返回一个不同的图书结果集,即图书表的所有列,其中图书名称或图书描述包含查询1结果中的任何单词。这就是我的SQL技能停滞不前的地方
我想在JavaPreparedStatement
中使用这个查询,所以如果您能坚持使用常规查询,而不是任何花哨的数据结构或存储过程,那就太好了
我将使用Microsoft SQL Server 2012作为数据库。您可以通过加入
来完成此操作。但在以下情况下使用LIKE
或CHARINDEX()
:
SELECT b.*
FROM Book b JOIN
(SELECT Name
FROM [User] u JOIN
UserLike ul
ON u.Id = ul.UserId JOIN
Likeable l
ON l.Id = ul.LikeableId
) n
ON b.title LIKE '%' + n.name + '%' OR
b.description LIKE '%' + n.name + '%';
您可以通过加入。但在以下情况下使用LIKE
或CHARINDEX()
:
SELECT b.*
FROM Book b JOIN
(SELECT Name
FROM [User] u JOIN
UserLike ul
ON u.Id = ul.UserId JOIN
Likeable l
ON l.Id = ul.LikeableId
) n
ON b.title LIKE '%' + n.name + '%' OR
b.description LIKE '%' + n.name + '%';