【问题标题】:SQLite not returning result when using AND使用 AND 时 SQLite 不返回结果
【发布时间】:2020-10-06 00:20:43
【问题描述】:

我有一个非常令人费解的问题。当我执行以下查询时:

SELECT DISTINCT posts.pid FROM posts 
INNER JOIN questions 
ON questions.pid = posts.pid 
INNER JOIN tags 
ON tags.pid = posts.pid 
WHERE tags.tag = 'Relational' COLLATE NOCASE;

在选择带有“关系”标签的帖子时,它能够返回以下 ID: 001、002、014、015。现在,当我执行提取另一个标签的查询时,如下所示:

SELECT DISTINCT posts.pid FROM posts 
INNER JOIN questions 
ON questions.pid = posts.pid 
INNER JOIN tags 
ON tags.pid = posts.pid 
WHERE tags.tag = 'Database' COLLATE NOCASE;

它能够返回 001、002、003、009、015、022。应该清楚 id 001、002 和 015 是重叠的 id,因此当我使用 AND 运算符时,它应该是我的预期回报.但是,当我执行以下查询时:

SELECT DISTINCT posts.pid FROM posts 
INNER JOIN questions 
ON questions.pid = posts.pid 
INNER JOIN tags 
ON tags.pid = posts.pid 
WHERE tags.tag = 'Relational' COLLATE NOCASE
AND tags.tag = 'Database' COLLATE NOCASE;

我得到一个空的结果。我已经尝试了很多东西,包括在条件和 AND 子句周围添加括号,我无法解决这个问题。谁知道是什么原因?

【问题讨论】:

    标签: sql database sqlite


    【解决方案1】:

    你想要聚合和having:

    SELECT q.pid
    FROM questions q
         tags t
         ON t.pid = q.pid
    WHERE t.tag IN ('Relational' COLLATE NOCASE, 'Database' COLLATE NOCASE)
    GROUP BY q.pid
    HAVING COUNT(*) = 2;
    

    如果你只是想获取post id,则不需要加入posts表。

    AND 的版本无法使用。 WHERE 子句一次只适用于一行,tag 不能在同一行中有两个值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-27
      • 1970-01-01
      • 2012-01-16
      相关资源
      最近更新 更多