2016-08-31 9 views
0

Microsoft SQL Server 2012データベースのSQLクエリを手伝ってもらえますか?私はこのクエリを使用して、ユーザーが好きなものの名前を取得するには、だから、2つの列のいずれかに値リストの値が含まれているテーブルから一致する行を選択してください

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結果セットを返したいのですが書籍テーブルのすべての列。ここで、書籍名または書籍の説明文のいずれかクエリ1の結果に含まれる単語のいずれかになります。これは私のSQLスキルが停止するところです。

JavaのPreparedStatementでこのクエリを使用したいのですが、ファンシーなデータ構造やストアドプロシージャではなく、通常のクエリを使用することができれば偉大になります。

データベースとしてMicrosoft SQL Server 2012を使用します。

答えて

2

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 + '%'; 
関連する問題