簡體   English   中英

從表中選擇匹配的行,其中兩列之一包含值列表中的任何值

[英]Select matching rows from a table where either one of two columns contain any value from a list of values

您能幫我對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表的所​​有列,其中書名或書說明包含查詢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 + '%';

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM