SQL-запрос, который выбирает ту же дату и время, но другое место - PullRequest
0 голосов
/ 09 ноября 2018

Мой вопрос:

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 голосов
/ 09 ноября 2018

Вы можете использовать такие 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;
0 голосов
/ 09 ноября 2018

использование exists

   select t1.* from PERFORMANCE t1
   where exists ( select 1 from PERFORMANCE t2 
               where t2.PerformDateTime=t1.PerformDateTime
               and t2.venue<>t1.venue
              )
0 голосов
/ 09 ноября 2018

Пожалуйста, попробуйте это.Поскольку ваш второй запрос выбора не имеет смысла, где условие, если вы удалите также те же данные будут получать логически.если вы хотите сгруппировать, так как все столбцы различны, поэтому вам необходимо добавить столбцы, которые различаются в выражении group by.Так что позже вы можете применить, где пункт зависит от требований.

SELECT distinct PERFORMANCE.PerformDesc,PERFORMANCE.PerformDateTime,PERFORMANCE.venue
    FROM PERFORMANCE GROUP BY PERFORMANCE.PerformDateTime,PERFORMANCE.PerformDesc,PERFORMANCE.PerformDateTime,PERFORMANCE.venue
0 голосов
/ 09 ноября 2018

Вы можете попробовать ниже

SELECT PerformDesc,PerformDateTime,venue FROM PERFORMANCE a
WHERE exists (SELECT 1 FROM PERFORMANCE b where a.PerformDateTime=b.PerformDateTime
and a.venue <> b.venue)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...