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

时间:2016-08-31 12:04:03

标签: 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      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 表的所有列,其中包含书籍名称或书籍description包含查询1 结果中的任何单词。这就是我的SQL技能停止的地方。

我想在Java PreparedStatement中使用此查询,因此如果您只是坚持使用常规查询而不是任何花哨的数据结构或存储过程,那就太棒了。

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

1 个答案:

答案 0 :(得分:2)

You can do this with a JOIN . . . but using LIKE or CHARINDEX() for the condition:

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