SQL select row where(这一列在另一列中有许多不同的值)

Posted

技术标签:

【中文标题】SQL select row where(这一列在另一列中有许多不同的值)【英文标题】:SQL select row where (this column has many different values in the other) 【发布时间】:2016-02-18 15:02:27 【问题描述】:

我想选择一些精确列具有不同值而另一个精确列具有相同值的行。

示例:

COLUMN_A  |  COLUMN_B
__________|___________
          |
1         |   2002
1         |   2002
2         |   2001
2         |   2007
3         |   2010
3         |   2010

现在,假设我想知道哪些行具有相同的 A 但不同的 B,查询将返回行

2         |   2001
2         |   2007

或者只是

2

只要我知道是哪一个...

【问题讨论】:

GROUP BY、COUNT DISTINCT 等 我会使用自联接或 Exists 查询。group by having distinct count 可能是性能最差的 select users have more than one distinct records in mysql的可能重复 @JamieD77 可能,但是如果 COLUMN_B 中有两个以上不同的值怎么办? Count Distinct 可以很好地处理它,而 Join 需要 Distinct 自己的。具有多个不同值的Join 变成笛卡尔积。 @Y.B.我会亲自使用 EXISTS ......我没有在自我加入上考虑太多:) 【参考方案1】:

Count(Distinct ColumnName) 就是这种情况。它确保只考虑唯一值。

With Src As (
    Select *
    From (Values
        (1, 2002),
        (1, 2002),
        (2, 2001),
        (2, 2007),
        (3, 2010),
        (3, 2010)
    ) V (COLUMN_A, COLUMN_B)
)
Select *
From Src
Where COLUMN_A In (
    Select COLUMN_A
    From Src
    Group By COLUMN_A
    Having Count(Distinct COLUMN_B) > 1 --<- "More than one unique value" condition
    )

COLUMN_A    COLUMN_B
       2        2001
       2        2007

【讨论】:

【参考方案2】:

你可以使用:

SELECT COLUMN_A  
FROM dbo.YourTable
GROUP BY COLUMN_A  
HAVING MIN(COLUMN_B) <> MAX(COLUMN_B);

另一种方法是使用EXISTS

SELECT *
FROM dbo.YourTable A
WHERE EXISTS(SELECT 1 FROM dbo.YourTable
             WHERE COLUMN_A = A.COLUMN_A
             AND COLUMN_B <> A.COLUMN_B);

【讨论】:

【参考方案3】:

这个没有分组:

SELECT x.column_a, x.column_b, y.column_b
  FROM table_name x
  JOIN table_name y
    ON ( x.column_a = y.column_a AND x.column_b <> y.column_b )

您只需将表连接到自身,并提供您正在寻找的条件。

【讨论】:

以上是关于SQL select row where(这一列在另一列中有许多不同的值)的主要内容,如果未能解决你的问题,请参考以下文章

pandas使用query函数查询dataframe中某一个数据列在指定数据范围的数据行(rows where value is between two values in dataframe)

oracle 查询一列在第五位数字为5的所有字段 123456 232356 统计字段第五位为数字5的条数一共有多少条

matlab查找某一行或者某一列在矩阵中的位置

sql中的2列在另一列之下

sql 查询 一个表中某几列数据

SQL LEFT JOIN 与另一列的 where 子句