我有一个表 yrs_order ,其中包含以下列:
header_key (primary key)
order_no
ref1
ref2
ref3
我想获得 ref1 相同的所有行的列表。
我该怎么做?
答案 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。