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

您能帮我查询Microsoft SQL Server 2012数据库的SQL吗?我有这样一个表结构:

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技能停滞不前的地方

我想在Java
PreparedStatement
中使用这个查询,所以如果您能坚持使用常规查询,而不是任何花哨的数据结构或存储过程,那就太好了


我将使用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 + '%';