获取column1 = column1和column2!= column2

时间:2016-07-28 16:58:21

标签: sql sqlite

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,所以我想要返回这个组。

2 个答案:

答案 0 :(得分:1)

根据您更新的问题,这应该有效。这将消除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

查询应返回:

{{1}}

答案 1 :(得分:0)

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

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