2017-04-13 101 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'); 
相关问题