sql查询表中重复列值

2Fa*_*Man 1 sql

我有一个表yrs_order,其中包含以下列:

header_key (primary key)
order_no
ref1
ref2
ref3
Run Code Online (Sandbox Code Playgroud)

我想获取ref1相同的所有行的列表。

我怎样才能做到这一点?

pax*_*blo 5

如果您只想要一个特定的 ref1,您可以使用:

select header_key from yrs_table where ref1 = 42
Run Code Online (Sandbox Code Playgroud)

但是,我怀疑您正在寻找共享ref1值的所有行。如果是这种情况,第一步是获取ref1有多个值的所有值的列表:

select ref1 from yrs_order group by ref1 having count(*) > 1
Run Code Online (Sandbox Code Playgroud)

然后您可以将其用作子查询来获取所有行的列表:

select header_key, ref1 from yrs_order where ref1 in (
    select ref1 from yrs_order group by ref1 having count(ref1) > 1
)
Run Code Online (Sandbox Code Playgroud)

以下文字记录显示了这一点:

> CREATE TABLE PAX1 (HDR_KEY INT PRIMARY KEY NOT NULL, REF1 INT);
Table created.

> INSERT INTO PAX1 (HDR_KEY, REF1) VALUES
>>    (0,0), (1,1), (2,1), (3,1), (4,1), (5,2), (6,2), (7,3), (8,4), (9,4);
10 rows inserted.

> SELECT * FROM PAX1 ORDER BY HDR_KEY ASC;
HDR_KEY   REF1
=======   ====
      0      0
      1      1
      2      1
      3      1
      4      1
      5      2
      6      2
      7      3
      8      4
      9      4
=======   ====
10 rows fetched.
Run Code Online (Sandbox Code Playgroud)

这显示了表的创建和填充,现在用于请求的查询:

> SELECT REF1, HDR_KEY FROM PAX1 WHERE REF1 IN (
>>    SELECT REF1 FROM PAX1 GROUP BY REF1 HAVING COUNT(*) > 1
>>  ) ORDER BY REF1 ASC, HDR_KEY ASC;
REF1   HDR_KEY
====   =======
   1         1
   1         2
   1         3
   1         4
   2         5
   2         6
   4         8
   4         9
====   =======
8 rows fetched.
Run Code Online (Sandbox Code Playgroud)

您可以看到计数为 1 的两行已被排除。