【发布时间】:2020-06-13 07:13:45
【问题描述】:
我的 Oracle 数据库中有下表:
CREATE TABLE test
(
flight NUMBER(4),
date DATE,
action VARCHAR2(50),
CONSTRAINT pk PRIMARY KEY (flight,date)
);
以及以下寄存器:
BEGIN
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');
END;
/
我的问题是,我想做一个 SELECT,只在航班起飞并在同一天到达时才返回我的航班号。例如,“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');
非常感谢。
【问题讨论】:
-
重复使用航班号是很常见的。您的数据模型中是否也会发生两个不同的航班具有相同的航班号或航班号唯一标识您表中的航班的情况?
-
顺便说一句,您不需要像您的情况那样在日期之间进行
to_char()转换。如果 date 列上存在索引,那么这种转换就会消除索引的影响。
标签: sql oracle date select constraints