2017-01-16 4 views
0

Я пытаюсь получить данные на основе условия дочерней таблицы, но это возвращает неправильный результат.Выберите запись на основе дочернего столбца в SQL Server

Если дата дочернего стола меньше, чем сегодня, то он обновляет IsActive до значения true, в противном случае - false.

Родитель таблица имеет 1 запись и подчиненная таблица 20 записей

select * 
from parenttable 
where exist (select * 
      from childtable child, parenttable parent 
      where changedate < getdate() 
      and parent.id = child.id) 

Subquery возвращает правильный ответ. Но я думаю, что вопрос с существовать

+0

Проблема у вас есть, что ваш внешний parenttable не связан с существует запрос в любом случае, так что если внутренний запрос находит хотя бы одну строку, внешний запрос ничего не возвращает –

+0

спасибо Джеймсу за ответ. Может, пожалуйста, дайте мне знать, как я могу это использовать – Shekhu

+0

Просьба поделиться структурой таблицы для работы –

ответ

0

Если подзапрос возвращает правильные данные, а затем избавиться от внешней части запроса, и просто возвращают данные из подзапроса:

select parent.* 
from childtable child 
INNER JOIN parenttable parent 
    on parent.id=child.id 
where changedate < getdate() 

существует проверка не должна происходить на всех. Если вы хотите, чтобы убедиться, что только одна строка возвращается на родителя, просто добавьте DISTINCT пункт:

select DISTINCT 
    parent.* 
from childtable child 
INNER JOIN parenttable parent 
    on parent.id=child.id 
where changedate < getdate() 
1

Хотя это не join как таковой, «подчиненная таблица» в пункте exists (да это exists и не exist) должен быть «связан» с родительской таблицей как в

select * from parenttable p where exists 
    (select * from childtable c 
    where c.pid=p.id and changedate < getdate()) 

предполагая, что столбец pid в дочерней таблицы, которая соответствует id столбца в родительской таблице.

+0

спасибо машинам за ответ .. но я все это пробовал, но это не сработало. Могу ли я использовать что-нибудь еще, а не существует – Shekhu

+0

Может быть, вы можете настроить небольшую скрипку с данными образца? Может быть здесь: http://rextester.com. – cars10m

Смежные вопросы