从表中选择匹配的行,其中两列中的任何一列包含值列表中的任何值
你能帮我一个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
做到这一点。 。 。 但使用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 + '%';