SELECT日期和时间相同但地点不同的SQL查询

时间:2018-11-09 05:28:49

标签: sql oracle

我的问题是:

List the performance description, date, time and venue of performances such
that for each one of the performances, there exists another performance
with the same date and time but performed in a different venue.

我认为唯一需要使用的表是:

CREATE TABLE PERFORMANCE (
PerformDateTime     timestamp   NOT NULL,
Venue       VARCHAR2(75),
PerformDesc VARCHAR2(75),
constraint PERFORMANCE_PKEY primary key (PerformDateTime, Venue)
);

我尝试了以下SELECT语句:

SELECT PerformDesc,PerformDateTime,venue FROM PERFORMANCE
WHERE PerformDateTime IN (SELECT PerformDateTime FROM PERFORMANCE GROUP BY venue);

并且:

SELECT PERFORMANCE.PerformDesc,PERFORMANCE.PerformDateTime,PERFORMANCE.venue
FROM PERFORMANCE GROUP BY (PERFORMANCE.PerformDateTime);

这两个语句都有错误:

ERROR at line 1:
ORA-00979: not a GROUP BY expression

将需要帮助!

4 个答案:

答案 0 :(得分:1)

您可以在下面尝试

SELECT PerformDesc,PerformDateTime,venue FROM PERFORMANCE a
WHERE exists (SELECT 1 FROM PERFORMANCE b where a.PerformDateTime=b.PerformDateTime
and a.venue <> b.venue)

答案 1 :(得分:0)

使用exists

   select t1.* from PERFORMANCE t1
   where exists ( select 1 from PERFORMANCE t2 
               where t2.PerformDateTime=t1.PerformDateTime
               and t2.venue<>t1.venue
              )

答案 2 :(得分:0)

请尝试这个。由于您的第二个选择查询没有任何条件的条件,因此如果您也删除了相同的数据,则将在逻辑上接收该数据。如果要分组,因为所有列都是不同的,因此必须添加group by子句中不同的列。 因此,稍后您可以应用where子句取决于需求。

SELECT distinct PERFORMANCE.PerformDesc,PERFORMANCE.PerformDateTime,PERFORMANCE.venue
    FROM PERFORMANCE GROUP BY PERFORMANCE.PerformDateTime,PERFORMANCE.PerformDesc,PERFORMANCE.PerformDateTime,PERFORMANCE.venue

答案 3 :(得分:0)

您可以使用这样的self-join

SELECT p1.PerformDesc, p1.PerformDateTime, p1.venue 
  FROM Performance p1
  JOIN Performance p2 ON ( p2.PerformDateTime = p1.PerformDateTime )
 WHERE p1.venue != p2.venue;