2017-08-01 5 views
0

これはSELECTステートメントでの可能性が完全にはわかりません。sqliteは列1と列2が複数の要件を満たす列1と区別されます

私は3つのテーブル、レコーディングを格納するテーブル、タグを格納するテーブル、タグをRecordings - TagsLinkにリンクするテーブルを持っています。

TagsLinkテーブルは、私がやることを期待していますどのような2列、TagsIDを格納1とRecordingsID

を保存するものを持っているだけで、選択タグ基準を満たすRecordingsIDsを返すです。したがって、TagsID 3が選択されている場合、Recording 1,2、および4が返されます。これは完全に可能ではない場合

SELECT DISTINCT RecordingsID FROM TagsLink WHERE ... 

:TagsID 3と4が選択されている場合と、それはそれはの線に沿って何か私の心の中で唯一の録音2,4

を返します。これを達成するための他の方法に関する助言(たとえそれがデータベースの再構成を必要とする場合であっても)を高く評価するでしょう!

+0

あなたはシオマネキを提供することはできますか? – Shuddh

+1

私はあなたがあなたの答えを得るかもしれないと思うhttps://www.techonthenet.com/sqlite/intersect.php – Shuddh

答えて

2

をサポートしていませんSQLiteの括弧を使用していない、INTERSECTですフィルタリングする。

他の同様の有益な回答hereおよびhereおよびhere

EDIT

次のようにINTERSECTを使用し、異なる列のフィルタリング、追加のテーブルに対応するために:

SELECT 
RecordingsID 
FROM 
TagsLink 
WHERE 
TagsID IN (3, 4, ...) 
GROUP BY 
RecordingsID 
HAVING COUNT(*) = 2 -- This number must match the number of tag IDs specified in the IN (...) list. 

INTERSECT 

SELECT 
RecordingsID 
FROM 
ContactsLink 
WHERE 
ContactsID IN (100, ...) 
GROUP BY 
RecordingsID 
HAVING COUNT(*) = 1 -- This number must match the number of contacts IDs specified in the IN (...) list. 
+0

ありがとう、あなたは伝説です!他のリンクもありがとう、私は見てみましたが、私の結果はあまり戻っていませんでした! –

+0

@PaulStringerの楽しさ!それはあなたのために動作する場合、それが正しい答えとしてそれを受け入れることを確認してください:) – Andy

+0

私は複数のテーブルのためにこれを行う方法を把握しようとしている私の脳を磨いてきた、あなたは私がそれについて行く方法を知っていると仮定しないでください?基本的には、連絡先とタグを録画にリンクすることができます。そのため、私はTagsLinkテーブルとContactsLinkテーブルも持っています。だから私は2つのタグと1つの連絡先を選択した場合、私はそれらのタグと連絡先の両方を持っているすべてのIDを記録したいですか? 2つのテーブルを1つのリンクテーブルと参照カラムを連結するだけでよいのでしょうか? –

1

これは動作するはずです: SELECT RecordingsID FROM tagslink WHERE TagsID = 4 Intersect SELECT RecordingsID FROM tagslink WHERE TagsID = 3 sqliteでテストできませんでした。

SELECT 
RecordingsID 
FROM 
TagsLink 
WHERE 
TagsID IN (3, 4, ...) 
GROUP BY 
RecordingsID 
HAVING COUNT(*) = 2 -- This number must match the number of tag IDs specified in the IN (...) list. 

キーがしたいタグに基づいて、カウントを調整することを忘れないことです。ただし、使用する機能は、クエリのこの種では、彼らに

+0

これはおかげで、私は何をする必要があるのです複数のテーブルを越えて作業することができます –

関連する問題