Sql-запрос для извлечения строк, в которых есть только » emp » и ничего больше

#sql #oracle

Вопрос:

Вот как выглядит мой стол:

col1 col2
Дата 1 «ЭМП»
Дата 1 «FSA»
Дата 1 «ТОЛЬКО»
ДАТА 2 «ЭМП»
Дата 3 «FSA»

Я хочу получить строки, в которых есть только «EMP», а не что-либо еще. В этом случае я должен получать только дату 2 в качестве вывода, а не дату 1.

Кто-нибудь может помочь мне с запросом?

Комментарии:

1. Похоже, никаких попыток не предпринималось

2. Попробуйте написать что-нибудь сами , а затем, если это не сработает, покажите нам конкретно, что вы сделали, чтобы мы могли вам помочь. Ты начинаешь, а потом мы помогаем. Мы пишем это не для вас. Покажите нам реальный код, который вы пробовали, а затем опишите, что произошло, а что неправильно, и тогда мы сможем вам помочь. Скорее всего, вы подойдете довольно близко к ответу, если сначала просто попробуете сами.

3. Почему только строка с датой 2? У вас есть две строки с требуемым «EMP».

Ответ №1:

Вы можете использовать подзапрос, как показано ниже:

 select * from table where col1 not in (select col1 from table where col2 != 'EMP');
 

Ответ №2:

вот один из способов:

 select * from tablename t1
where col2 = 'emp'
and not exists (select 1 from tablename t2 where t1.date = t2.date and t2.col2 <> 'emp')
 

или вы можете использовать оконные функции:

 select * from (
  select *, count(case when col2 <> 'EMP' then 1 end) over (partition by col1) cnt
  from tablename
) t
where t.cnt = 0 
and t.col2 = 'emp'
 

Комментарии:

1. первый запрос выдает мне «ошибка пропущенного левого парантеза». Это в oracle

2. Я пропустил псевдоним таблицы для col2 внутри подзапроса «t2.col2» , попробуйте сейчас

3. выберите * из таблицы CSESDEV02.BATCH_CONTROL_INFO ACTIONBATCHCONTROLINFORMATION, где ACTIONBATCHCONTROLINFORMATION.CDE_BTCH_SRCE = » EMP » и не существует (выберите 1 из таблицы CSESDEV02.BATCH_CONTROL_INFO ACTIONBATCHCONTROLINFORMATION2, где ACTIONBATCHCONTROLINFORMATION.DTE_CRTE_BC = ACTIONBATCHCONTROLINFORMATION2.DTE_CRTE_BC и ACTIONBATCHCONTROLINFORMATION2.CDE_BTCH_SRCE < > ‘EMP’)- я добавил псевдоним перед собой. это фактический запрос. это приводит к ошибке левого парантеза

4. @ushaduddu о ,удалите ключевое слово «таблица» перед именами таблиц : select * from CSESDEV02.BATCH_CONTROL_INFO ACTIONBATCHCONTROLINFORMATION where ACTIONBATCHCONTROLINFORMATION.CDE_BTCH_SRCE = 'EMP' and not exists ( select 1 from CSESDEV02.BATCH_CONTROL_INFO ACTIONBATCHCONTROLINFORMATION2 where ACTIONBATCHCONTROLINFORMATION.DTE_CRTE_BC = ACTIONBATCHCONTROLINFORMATION2.DTE_CRTE_BC and ACTIONBATCHCONTROLINFORMATION2.CDE_BTCH_SRCE <> 'EMP' )

Ответ №3:

Вот ваш запрос. Вы добавили table ключевое слово перед именами таблиц. В этом-то и проблема.

 select * from CSESDEV02.BATCH_CONTROL_INFO ACTIONBATCHCONTROLINFORMATION 
where ACTIONBATCHCONTROLINFORMATION.CDE_BTCH_SRCE = 'EMP' 
and not exists (select 1 from CSESDEV02.BATCH_CONTROL_INFO ACTIONBATCHCONTROLINFORMATION2 where ACTIONBATCHCONTROLINFORMATION.DTE_CRTE_BC = ACTIONBATCHCONTROLINFORMATION2.DTE_CRTE_BC and ACTIONBATCHCONTROLINFORMATION2.CDE_BTCH_SRCE <> 'EMP')