sql не существует запрос - PullRequest
       0

sql не существует запрос

0 голосов
/ 17 декабря 2011

у меня следующий SQL-запрос

declare @temp table(RevisionStatus varchar(100),DocTypeID varchar(50))
insert into @temp(RevisionStatus,DocTypeID)
select distinct md.RevisionStatus,dt.DocumentTypeID
from MissingDesignData md inner join tblDocumentType dt on md.[Doc Type]=dt.DocumentType inner join tblRevisionStatus rv on md.RevisionStatus=md.RevisionStatus

select distinct tm.RevisionStatus,tm.DocTypeID as 'DocType'
from @temp tm 
rv.RevisionStatus=tm.RevisionStatus and rv.DocType=tm.DocTypeID
where not exists (select distinct rss.RevisionStatus,rss.DocType from tblRevisionStatus rss)

мне нужно вернуть записи, которые не существуют в таблице tblRevisionStatus, но существуют в таблице @temp. В настоящее время он возвращает пустой набор данных

когда я выбираю @temp data, это выглядит следующим образом

RevisionStatus  DocType
PEN - Pending   14
PEN - Pending   16
PEN - Pending   2
PEN - Pending   3
PEN - Pending   30
PEN - Pending   34
PEN - Pending   5
PEN - Pending   55

tblRevisionStatus набор данных возвращается как

RevisionStatus              DocType

IFC - Issued For Construction       4
RFD - Revised As Denoted                4
IFU - Issued For Use            4
AB - As Built               NULL
C1 - Proceed, No Exception Taken            2
PEN - Pending               1
PEN - Pending               2
HLD - HOLD (Implementation Study ONLY)  1

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

PEN - Pending       2

запись существует в таблице tblRevisionStatus, так почему запрос не возвращает другие записи. Я что-то здесь упустил?

Ответы [ 3 ]

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

Если вам нужен список строк, которые находятся в @Temp, а не в tblRevisionStatus, вы можете легко сделать это, используя оператор EXCEPT

select RevisionStatus, DocType
from @Temp

except

select RevisionStatus, DocType
from tblRevisionStatus
0 голосов
/ 17 декабря 2011

Я бы посоветовал вам не использовать IN и DISTICTS.Это в большинстве случаев плохо для производительности.Так что мое предложение таково:

SELECT 
    tbl.RevisionStatus,
    tbl.DocTypeID as 'DocType'
FROM 
    @temp AS tbl 
WHERE NOT EXISTS
    (
        SELECT 
            NULL 
        FROM 
            tblRevisionStatus
        WHERE
            tblRevisionStatus.RevisionStatus=tbl.RevisionStatus
    )
    AND NOT EXISTS
        (
            SELECT 
                NULL 
            FROM 
                tblRevisionStatus
            WHERE
                tblRevisionStatus.DocTypeID=tbl.DocTypeID
        )
0 голосов
/ 17 декабря 2011

Фактический метод состоит в том, чтобы использовать первичные ключи для требований этого типа, но вы можете попробовать следующий код для выбора результатов после переноса данных во временную таблицу

SELECT RevisionStatus,DocTypeID as 'DocType'
from @temp where RevisionStatus not in(select distinct RevisionStatus From tblRevisionStatus) and DocTypeID not in (select distinct DocTypeID From tblRevisionStatus)

Я все еще подчеркиваю использование первичных ключей во всех таблицах

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...