sql查询表中重复的列值

时间:2011-12-16 01:08:19

标签: sql

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

header_key (primary key)
order_no
ref1
ref2
ref3

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

我该怎么做?

2 个答案:

答案 0 :(得分:4)

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

select header_key from yrs_table where ref1 = 42

但是,我怀疑你是在所有共享ref1值的行之后。如果是这种情况,第一步是获取所有ref1值的列表,其中有多个值:

select ref1 from yrs_order group by ref1 having count(*) > 1

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

select header_key, ref1 from yrs_order where ref1 in (
    select ref1 from yrs_order group by ref1 having count(ref1) > 1
)

以下成绩单显示了这一点:

> 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.

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

> 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.

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

答案 1 :(得分:0)

SELECT *
FROM yrs_order
WHERE ref1 = 1

将1替换为您希望ref1等于的值。这将使用您指定的值列出所有ref1。