Oracle中要通过子查询选择的查询

问题描述 投票:0回答:1

我在Oracle数据库上有下表:

CREATE TABLE test
(
flight NUMBER(4),
date DATE,
action VARCHAR2(50)
CONSTRAINT pk PRIMARY KEY (flight,date)
);

和以下寄存器:

INSERT INTO test VALUES ('1234', '2020-02-29 18:00', 'Departure');
INSERT INTO test VALUES ('1234', '2020-02-29 19:00', 'Arrival');

INSERT INTO test VALUES ('4321', '2020-02-20 22:00', 'Departure');
INSERT INTO test VALUES ('4321', '2020-02-21 04:30', 'Arrival');

我的问题是,我想进行一次选择,以便仅在起飞和到达同一天时才返回航班号。例如,航班“ 1234”已在第29天起飞,并在第29天到达,但另一方面,航班“ 4321”已在第20天出发,并在第21天到达。我只想选择航班“ 1234” ',因为它是唯一满足要求的人。

我一直在考虑以下选择,但是它不起作用,因为子查询返回的不只是一个值:

SELECT flight
FROM test
WHERE action = 'Departure'
AND TO_CHAR(date, 'YYYY-MM-DD') = (SELECT TO_CHAR(date, 'YYYY-MM-DD')
                                   FROM test
                                   WHERE action = 'Arrival');

非常感谢。

oracle select constraints
1个回答
0
投票

您需要两次加入同一张表

SELECT t1.flight
FROM test t1
INNER JOIN test t2 ON t1.action = 'Departure'
    AND TO_CHAR(t1.date, 'YYYY-MM-DD')  = TO_CHAR(t2.date, 'YYYY-MM-DD')
    AND t2.action = 'Arrival'

或使用子查询..再次使用适当的FROM子句

SELECT flight
FROM test
WHERE action = 'Departure'
AND TO_CHAR(date, 'YYYY-MM-DD') = (
    SELECT TO_CHAR(date, 'YYYY-MM-DD')
    FROM test
    WHERE action = 'Arrival');
© www.soinside.com 2019 - 2024. All rights reserved.