【问题标题】:sqlite3 : Compare two cells from the same tablesqlite3 : 比较同一张表中的两个单元格
【发布时间】:2019-02-11 11:14:17
【问题描述】:

我有一张这样的桌子

CREATE TABLE "modules" ( `ID` INTEGER PRIMARY KEY AUTOINCREMENT, `name` TEXT, `version` TEXT, `deployID` INTEGER )

我希望能够从该数据库中获取不同部署 ID 之间版本不同的所有行。所以,假设我有一个部署 ID 2 和一个部署 ID 3 - 我的表可能有 2000 个模块用于这些部署中的每一个。我只想获取名称相同但版本不同的行。这可能吗?我认为这个查询会做到这一点,但它似乎将所有内容都返回给我 - 两次!

SELECT a.* FROM modules a 
INNER JOIN modules b 
ON a.name == b.name 
WHERE a.version != b.version 
AND a.deployID = 3 
AND b.deployID = 2 

【问题讨论】:

    标签: sqlite


    【解决方案1】:

    如果你只关心deployids 23

    select m.*
    from modules m
    where 
      m.deployid in (2, 3)
      and
      exists (
        select 1 from modules 
        where 
          name = m.name 
          and
          deployID <> m.deployID 
          and 
          version <> m.version
      )
    

    如果你不需要这个条件:

    deployID <> m.deployID
    

    你可以删除它。

    【讨论】:

      【解决方案2】:

      我可能会在这里使用存在查询:

      SELECT m1.*
      FROM modules m1
      WHERE EXISTS (SELECT 1 FROM modules m2
                    WHERE m1.name = m2.name AND
                          m1.deployID <> m2.deployID AND m1.version <> m2.version);
      

      或者您可能想要更具体的版本:

      SELECT m1.*
      FROM modules m1
      WHERE EXISTS (SELECT 1 FROM modules m2
                    WHERE m1.name = m2.name AND
                          LEAST(m1.deployID, m2.deployID) = 2 AND
                          GREATEST(m1.deployID, m2.deployID) = 3);
      

      【讨论】:

      • 这似乎不起作用。 deployID 上的 匹配不相等的部署。我只是想比较两个具体的部署。
      • 更改为 SELECT m1.* FROM modules m1 WHERE EXISTS (SELECT 1 FROM modules m2 WHERE m1.name = m2.name AND m1.deployID = 2 AND m2.deployID = 3 AND m1.version &lt;&gt; m2.version); 同样似乎返回 deployID 2 中的所有行,而不是“唯一”行
      • @RealWorld 您从未为您的问题提供任何示例数据,让我们猜测您想要什么。我给了你另一个更具体的查询,它可能适用于你的情况。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-22
      • 1970-01-01
      • 2017-02-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多