Как мне сделать это в запросе (пример предоставлен)? - PullRequest
0 голосов
/ 15 декабря 2011

Я кое-что новенькое в том, что SQL подвергается воздействию в моей текущей роли.

Как мне написать следующий запрос, чтобы он мог работать?

select *
from property.lease_period lp
where lp.lease_current_stop_date < getdate() and (lp.lease_status = 'Active' or lp.lease_status = 'Overholding')
and lp.period_id = 263      --- Period ID
and lp.building_id = 40000  --- Building ID
and not (SELECT *
            FROM property.lease_period lp
            inner join lease_deal.lease ld on lp.suite_id = ld.tenancy_reference
            where lp.lease_current_stop_date < getdate() and (lp.lease_status = 'Active' or lp.lease_status = 'Overholding')
            and lp.period_id = 263
            and lp.building_id = 40000)

По сути, я хочупоказать результаты:

select *
from property.lease_period lp
where lp.lease_current_stop_date < getdate() and (lp.lease_status = 'Active' or lp.lease_status = 'Overholding')
and lp.period_id = 263      --- Period ID
and lp.building_id = 40000  --- Building ID

без учета результатов, которые соответствуют:

SELECT *
FROM property.lease_period lp
inner join lease_deal.lease ld on lp.suite_id = ld.tenancy_reference
where lp.lease_current_stop_date < getdate() and (lp.lease_status = 'Active' or lp.lease_status = 'Overholding')
and lp.period_id = 263
and lp.building_id = 40000

Извините за основной вопрос!Кроме того, любые другие советы, кроме этого, для лучшего форматирования моего SQL будут с благодарностью!

Edit :

Я считаю, что это может быть решением для того, что я ищудля:

select
    *
from
    property.lease_period lp
where 
    lp.lease_current_stop_date < getdate() and (lp.lease_status = 'Active' or lp.lease_status = 'Overholding')
    and lp.period_id = 263      --- Period ID
    and lp.building_id = 40000  --- Building ID
    and not exists
    (
        select 1
        from lease_deal.lease
        where lp.suite_id = tenancy_reference
    )
order by period_id desc

Определенно заинтересован в том, чтобы услышать лучшие способы написания этого!

Ответы [ 2 ]

1 голос
/ 15 декабря 2011

Вы можете оставить присоединение к таблице исключений и принимать только нулевые совпадения из этого объединения.

select lp.*
from property.lease_period lp
left join lease_deal.lease ld on lp.suite_id = ld.tenancy_reference
where lp.lease_current_stop_date < getdate()
and (lp.lease_status = 'Active' or lp.lease_status = 'Overholding')
and lp.period_id = 263      --- Period ID
and lp.building_id = 40000  --- Building ID
and ld.tenancy_reference is null
1 голос
/ 15 декабря 2011

Это может быть более простой способ обработки (вместе с моими личными предпочтениями форматирования):

SELECT 
    *
FROM 
    property.lease_period lp
WHERE
    lp.lease_current_stop_date < GETDATE() 
    AND
    (lp.lease_status = 'Active' or lp.lease_status = 'Overholding')
    AND 
    lp.period_id = 263      --- Period ID
    AND
    lp.building_id = 40000  --- Building ID
    AND
    lp.suite_id NOT IN (SELECT tenancy_reference FROM lease_deal.lease)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...