【问题标题】:Get all rows where column1=column1 and column2!=column2获取 column1=column1 和 column2!=column2 的所有行
【发布时间】:2016-07-28 16:58:21
【问题描述】:

是否有可能,在 Sqlite3 中,SELECT 所有行的一个属性相等但另一个属性不相等?

SELECT count(*),title,katalogove_cislo FROM records GROUP BY katalogove_cislo ORDER BY count(*)

例如,此查询返回具有相等katalogove_cislo 的分组行。我想排除那些具有相同列 popis 的组。

所以

id,katalogove_cislo,popis
1,444,xxx
2,444,xxx
3,555,xx
4,555,xx
6,555,xy

将返回一组katalogove_cislo - 555,因为组 444 具有相同的列 popis

编辑:

我尽量让它更清楚。

如果我按 katalogove_cislo 进行分组,我会得到具有相同 katalogove_cislo 的“组”。每个组可以包含具有相同 katalogove_cislo 的多行。我只想获得那些组,其中至少一行的标题与组中的其他行不同。

id,katalogove_cislo,popis
1,444,xxx
2,444,xxx
3,555,xx
4,555,xx
6,555,xy

如果我在这张表上按 katalogove_cislo 分组,我会得到 444 和 555。但是,由于 katalogove_cislo 444 组中的行具有相等的 popis(xxx 和 xxx),我不想看到这个组。 katalogove_cislo 555 的第二组没有相同的标题 - xx == xx != xy ,所以我想返回这个组。

【问题讨论】:

    标签: sql sqlite


    【解决方案1】:

    根据您更新的问题,这应该可行。这将消除在 popis 中仅出现一次 不同 值的记录。

    SELECT
        -- This returns the original values from the source table
        tb.id,
        tb.katalogove_cislo,
        tb.popis
    FROM
        (
        -- This will return only values in katalogove_cislo where
        -- there are more than 1 distinct values in popis.
        SELECT
           katalogove_cislo,
           COUNT(DISTINCT popis) AS popis_count
        FROM
           records
        GROUP BY
           katalogove_cislo,
        HAVING
           COUNT(DISTINCT popis) > 1
        ) ta
    INNER JOIN
        records tb
        ON (ta.katalogove_cislo = tb.katalogove_cislo)
    

    从这个数据集开始:

    id | katalogove_cislo | popis
    -----------------------------
     1 |    444           | xxx
     2 |    444           | xxx
     3 |    555           | xx
     4 |    555           | xx
     5 |    555           | xy
    

    查询应该返回:

    id | katalogove_cislo | popis
    -----------------------------
     3 |    555           | xx     
     4 |    555           | xx
     5 |    555           | xy
    

    【讨论】:

    • 感谢您的回答。要清楚 - 我想在这种情况下获取行:如果有一组具有相同 katalogove_cislo 的行,那么,如果所有这些行的标题不相等,则返回 katalogove_cislo。所以我想要具有相同 katalogove_cislo 但标题不同的行。
    • @Milano - 我不是 100% 清楚你在问什么。您能否更新您的帖子,提供有关您的表格设计和数据的更多信息和细节?
    • 我已经尝试过详细说明,请检查问题的底部。谢谢
    【解决方案2】:

    您要检查组的所有行,这需要应用以下逻辑:

    SELECT
       count(*) AS cnt,
       katalogove_cislo
    FROM
       records
    GROUP BY
       katalogove_cislo
    HAVING -- at least two different values
       MIN(popis) <> MAX(popis)
    ORDER BY
       cnt
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-14
      • 2012-05-29
      • 1970-01-01
      • 1970-01-01
      • 2018-02-20
      • 2014-07-11
      • 1970-01-01
      • 2015-05-05
      相关资源
      最近更新 更多