我有一个表yrs_order,其中包含以下列:
header_key (primary key)
order_no
ref1
ref2
ref3
Run Code Online (Sandbox Code Playgroud)
我想获取ref1相同的所有行的列表。
我怎样才能做到这一点?
如果您只想要一个特定的 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 的两行已被排除。