Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выборка из множества на основании другого множ... MS SQL 2005 
V
    Опции темы
DZeus
Дата 16.4.2008, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 20.3.2008

Репутация: нет
Всего: нет



Имеется 2 множества (таблицы)

Patient (snInsurance NVARCHAR(25), idLpu NVARCHAR(10), recid INT) - таблица пациентов

errorList (snInsurance NVARCHAR(25), idLpu NVARCHAR(10), recid INT, errorCode NVARCHAR(2)) - список ошибок, которая заполняется на основании таблицы пациентов (при выявлении ошибочно заполненных данных)

Задача:

Выбрать все записи из Patient, которые содержатся в errorList с кодом ошибки НЕ равном 'E1' (к примеру) ИЛИ НЕ содержатся в errorList (вообще)

Я писал так:

Код

SELECT DISTINCT
        pat.recid,
        pat.snInsurance,
        pat.idLpu
    
    FROM
        dbo.patient pat,
        dbo.errorList errList
    WHERE
        pat.idLpu = '3141001'
    AND 
                errList.idLpu = '3141001'
    AND
         pat.snInsurance = errList.snInsurance
    AND 
               errList.errorCode NOT IN ('E1')


Имею 2 записи в таблице errorList - первая с кодом ошибки "Е1", вторая с кодом "Е2",

Отображает 1 запись... (а должен отображать ещё 1000 записей из patient, вобще не содержащих ошибок)

ЗЫЖ Знаю, надо использовать вложенные запросы, мозг не варит КАК?
PM MAIL   Вверх
ТоляМБА
Дата 16.4.2008, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


Профиль
Группа: Завсегдатай
Сообщений: 1607
Регистрация: 15.12.2004

Репутация: 4
Всего: 252



Код
SELECT DISTINCT
        pat.recid,
        pat.snInsurance,
        pat.idLpu  
    FROM
        dbo.patient pat
where pat.snInsurance NOT IN
(Select distinct errorList.snInsurance
from snInsurance
where snInsurance.errorCode IN ('E1'))
Писал без проверки, проверь на базе. Суть: в подзапросе выбираются snInsurance РАВНЫЕ 'E1', а запросом выводятся записи не включающие этот snInsurance.


Цитата(DZeus @  16.4.2008,  14:03 Найти цитируемый пост)
pat.idLpu = '3141001'
    AND 
                errList.idLpu = '3141001'
Этого не было в описании задания, добавь сам или опиши конкретнее.

PM   Вверх
Magnifico
Дата 16.4.2008, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 23.1.2008
Где: Московская област ь

Репутация: 4
Всего: 17



Код

select * 
from Patient t1
left join 
errorList  t2
on  t1.snInsurance = t2.snInsurance
where  t2.snInsurance is  null
or  t2.errorcode <> 'e1'


snInsurance ( номер страхования от аннгл. )  я думаю именно по этому полю
соединяются таблицы


--------------------
Всё  в  порядке   -   спасибо  зарядке  !
PM MAIL   Вверх
DZeus
Дата 16.4.2008, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 20.3.2008

Репутация: нет
Всего: нет



Цитата(Magnifico @  16.4.2008,  12:43 Найти цитируемый пост)
snInsurance ( номер страхования от аннгл. )  я думаю именно по этому полю
соединяются таблицы 

Спасибо вам большое, ваше левое соединение заработало, правда где-то ещё пара записей потерялась, но я думаю отлажу... =)

Цитата(ТоляМБА @  16.4.2008,  12:23 Найти цитируемый пост)
Цитата(DZeus @  16.4.2008,  14:03 Найти цитируемый пост)
pat.idLpu = '3141001'
    AND 
                errList.idLpu = '3141001'
Этого не было в описании задания, добавь сам или опиши конкретнее.


Это можно опустить, так как роли не играет... (просто по конкретному LPU идёт отбор)
Спасибо, я уловил вашу мысль и немного переделав...
Код

SELECT DISTINCT
        pat.recid,
        pat.snInsurance,
        pat.idLpu  
    FROM
        dbo.patient pat
    WHERE 
        pat.snInsurance NOT IN (
    SELECT DISTINCT errorList.snInsurance
    FROM 
         dbo.errorList
    WHERE 
         errorList.errorCode IN ('E1')

                            )


получил то что хотел...

Ещё раз, огромное вам спасибо

Добавлено через 4 минуты и 53 секунды
жаль нет у меня 100 постов, я бы вам с удовольствием репутацию улучшил (всем) =)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0605 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.