你能帮我解决一下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作为数据库。
答案 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 + '%';