从表中选择匹配的行,其中两列中的任何一列包含值列表中的任何值

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

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的结果:

 Name ---------- Python C# Kotlin 

我想要的是:

现在,我想返回DISTINCT结果集的书籍,即Book表的所​​有列,其中书名或书籍说明包含查询1的结果中的任何单词。 这是我的SQL技能停下来的地方。

我想在Java PreparedStatement使用这个查询,所以如果你只是坚持使用一个常规的查询,而不是任何奇特的数据结构或存储过程,这将是伟大的。

我将使用Microsoft SQL Server 2012作为数据库。

你可以用JOIN做到这一点。 。 。 但使用LIKECHARINDEX()作为条件:

 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 + '%';