2017-04-13 49 views
0

我遇到了SQL請求的問題。 我有兩個表:從其他表中的多個條件的SQLite選擇行

  • 主表是
Id | Name 
1 | Name_1 
2 | Name_2 
  • 關鍵字表
Id | _mainId | key 
1 | 1 | kw1 
2 | 1 | kw2 
3 | 1 | kw3 
4 | 2 | kw2 
5 | 2 | kw4 

,我想這與選擇

像這樣的所有關鍵字返回鬃毛表的ID和姓名的請求:

SELECT DISTINCT(t1.Id), t1.Name 
FROM  main t1 
INNER JOIN keywords t2 ON t2._Main = t1.Id 
WHERE  t2.keyword = 'kw2' AND t2.keyword = 'kw4'; 
+1

sqllite或mysql? – McNets

+0

我們如何知道「所有關鍵字」的含義? –

+0

@McNets它的SQLite。 – Thibaud

回答

1

在在下面的查詢中,子查詢別名爲t2標識具有關鍵字'kw2''kw4'的所有ID。然後,我將main表加入此子查詢中,以獲取這些匹配ID的名稱信息。

SELECT t1.Id, t1.Name 
FROM main t1 
INNER JOIN 
(
    SELECT _mainId 
    FROM keywords 
    WHERE keyword IN ('kw2', 'kw4') 
    GROUP BY _mainId 
    HAVING COUNT(DISTINCT keyword) = 2 
) t2 
    ON t1.Id = t2._mainId 
+0

它工作得很好!謝謝 ! 只是一個問題,如果我想使用超過2個關鍵字,我更改關鍵字的數量「2」? – Thibaud

+0

@Thibaud是的,只需更改'2'以匹配'IN'子句中的目標關鍵字數量。 –

0

試試這個:

SELECT DISTINCT 
    t1.Id, t1.Name 
FROM 
    main t1 
    INNER JOIN keywords t2 ON t2._mainId=t1.Id 
WHERE 
    t2.key IN ('kw2', 'kw4'); 
相關問題