选择两列之间仅具有唯一关系的行DBMS SQL

时间:2019-03-07 15:05:26

标签: sql

我试图编写一个查询以选择两列之间具有唯一关系的所有行。

例如:

1   2   3   4
-------------
a   t   g   1
a   f   d   1
b   h   l   2
b   r   g   2
b   q   m   3

在这里,我只看第1列和第4列。

在此表中,我想选择第1行和第2行,因为在这两个行中,第1列= a和第4列=1。换句话说,每次在第1列中出现a时,在第4列中出现1。我不想为列1选择任何包含b的行,因为列4的那些对应值可以是2或3。

3 个答案:

答案 0 :(得分:1)

通过此查询,您可以轻松获得满足您要求的第1列值:

SELECT col1
FROM mytable
GROUP BY col1
HAVING COUNT(DISTINCT col4) = 1

因此,您的最终查询将是:

SELECT *
FROM mytable
WHERE col1 IN 
(
    SELECT col1
    FROM mytable
    GROUP BY col1
    HAVING COUNT(DISTINCT col4) = 1
)

答案 1 :(得分:0)

我想这就是您想要的:

select *
from my_table
where "1" in (
  select c1
  from (
    select "1" as c1, count("4") as cnt
    from my_table
    group by "1" -- fixed here.
    having count("4") > 1
  ) x
  group by c1
  having count(cnt) = 1 -- this is the key condition.
)

考虑到列名不是以字母开头,如果像我一样用双引号("括起来,那么大多数数据库都会接受它们。

答案 2 :(得分:0)

要选择实际的行,然后使用not exists

select t.*
from t
where not exists (select 1 from t t2 where t2.c1 = t.c1 and t2.c4 <> t.c4);

如果只想使用c1值,则按照其他答案的建议使用group by