我在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');
非常感谢。
您需要两次加入同一张表
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');