【问题标题】:How to build this query in sqlite?如何在 sqlite 中构建此查询?
【发布时间】:2010-08-08 21:11:28
【问题描述】:

我有带有示例结构和数据的 sqlite3 数据库:

CREATE TABLE person(id INTEGER PRIMARY KEY NOT NULL, name STRING NOT NULL);
INSERT INTO "person" VALUES(1,'Jack');
INSERT INTO "person" VALUES(2,'Daniel');
INSERT INTO "person" VALUES(3,'Sam');
INSERT INTO "person" VALUES(4,'T`lc');
CREATE TABLE vote(person_id INTEGER NOT NULL, article_id NUMBER NOT NULL, FOREIGN KEY(person_id) REFERENCES person(id));
INSERT INTO "vote" VALUES(1,43256);
INSERT INTO "vote" VALUES(1,43436);
INSERT INTO "vote" VALUES(1,67388);
INSERT INTO "vote" VALUES(1,43678);
INSERT INTO "vote" VALUES(2,678);
INSERT INTO "vote" VALUES(2,6788);
INSERT INTO "vote" VALUES(2,67388);
INSERT INTO "vote" VALUES(4,67388);
INSERT INTO "vote" VALUES(4,67658);

现在我想(在一个选择查询中)找到所有女巫:

  1. 根本不投票
  2. 不要投票给第 67388 条

我不知道该怎么做:/

帮助:'(

【问题讨论】:

    标签: sql select sqlite


    【解决方案1】:

    使用 OR:

    SELECT p.*
       FROM PERSON p
     WHERE NOT EXISTS(SELECT NULL
                                    FROM VOTE v
                                   WHERE v.person_id = p.id) -- no votes at all
           OR NOT EXISTS(SELECT NULL
                                     FROM VOTE v
                                    WHERE v.person_id = p.id
                                         AND v.article_id = 67388)
    

    使用联合

    SELECT p.*
      FROM PERSON p
     WHERE NOT EXISTS(SELECT NULL
                                    FROM VOTE v
                                   WHERE v.person_id = p.id)
    UNION
    SELECT p.*
      FROM PERSON p
     WHERE NOT EXISTS(SELECT NULL
                                    FROM VOTE v
                                   WHERE v.person_id = p.id
                                        AND v.article_id = 67388)
    

    UNION 比 UNION ALL 慢,因为它会删除重复项。如果要重复,只需在“UNION”后添加“ALL”关键字即可。

    【讨论】:

    • 感谢它很好用:D(变化不大:v.article_id 67388)
    • @BPS:那是因为你在 EXISTS 之前忘记了NOT
    【解决方案2】:

    第 1 项:select id,name from person where id not in (select person_id from vote)

    第 2 项:select id,name from person where id not in (select person_id from vote where article_id = 67388)

    【讨论】:

    • 哇,它有效,但它必须在一个 select 语句中,抱歉 ;)
    猜你喜欢
    • 2021-11-09
    • 1970-01-01
    • 1970-01-01
    • 2021-10-26
    • 1970-01-01
    • 2017-08-05
    • 2017-05-10
    • 1970-01-01
    • 2012-03-17
    相关资源
    最近更新 更多