sql JOIN 与 WHERE 上的 bool 值

标签 sql sqlite

首先,请注意,我对 SQL(本例中为 sqlite3)缺乏经验,因此即使是这个问题的标题也可能措辞不当。

假设我有一个注释表 (n),以及这些注释的关键字表 (k),最后是一个关联一个或多个关键字的表每个音符 (nk)。我想做的是找到每个包含两个(或更多)关键字的注释。

更具体一点,下面(sqlite3)是我设置数据库的方式。

CREATE TABLE n(nid integer primary key autoincrement, content);
CREATE TABLE k(kid integer primary key autoincrement, content);
CREATE TABLE nk(nkid integer primary key autoincrement, nid, kid);
INSERT INTO n(content) VALUES ("note 1");
INSERT INTO n(content) VALUES ("note 2");
INSERT INTO k(content) VALUES ("keyword 1");
INSERT INTO k(content) VALUES ("keyword 2");
INSERT INTO nk(nid, kid) VALUES (1, 1);
INSERT INTO nk(nid, kid) VALUES (1, 2);
INSERT INTO nk(nid, kid) VALUES (2, 1);

有了这个,我可以使用关键字 ID 为 1 来获取标记的笔记

select * from n LEFT JOIN nk ON nk.nid = n.nid WHERE nk.kid=1;

我的问题是如何获得关键字ID为12的笔记。我在网上做了一些搜索,但我担心我的知识不足以想到好的搜索术语。我希望这个网站上的人能够提供帮助,而且重要的是,如果这是一个愚蠢的问题,我深表歉意。

最佳答案

改进@GordonLinoff的答案:

select * from n where nid IN 
 (select nid
  from (select * from nk where kid in (1,2)) s
  group by nid
  having count(distinct s.kid) = 2)

这将获取 kid 与 1 和 2 匹配的记录,即使可能存在其他 kid 值(3,4 等)。 sqlfiddle here .

关于sql JOIN 与 WHERE 上的 bool 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14836568/

相关文章:

MySQL 从具有时间戳列的表中选择重复时间间隔内的所有条目

mysql - Sql 多次返回行

json - ionic : I have a scope variable empty from a stringified json

java - Hibernate MYSQL native 查询抛出 ClassCastException

sql - 如何采用单独列排序的 DISTINCT ON 子查询,并使其快速?

mysql - 选择命令不返回任何内容

Python/Sqlite 程序,写成浏览器应用程序还是桌面应用程序?

sql - 需要sqlite查询从表中删除具有最小值的行

java - 我可以对具有两个主键的数据库进行两次选择吗?

python - SQLite语句语法错误