2014-10-18 6 views
0

У меня есть таблица пациента, который имеет patientnum, patientname и insurance_cover таблица, которая имеет patientnum, insurancecodeКак считать данные из другой таблицы

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

SELECT 'WITH INSURANCE' AS '',PATIENTNUM, PATIENTSURNAME 
from PATIENT where PATIENTNUM 
IN(select PATIENTNUM from INSURANCE_COVER) 

UNION 

SELECT 'WITHOUT INSURANCE' AS '',PATIENTNUM, PATIENTSURNAME 
from PATIENT where PATIENTNUM 
NOT IN(select PATIENTNUM from INSURANCE_COVER) 

Этот код показывает данные, которые со страховкой и без страховки .. Но я не знаю, как считать страхование пациентов, имеющих страховку.

Правильно ли я использую НЕ В? Не могли бы вы помочь мне?

+0

Нужно ли вам суммировать информацию о количестве пациентов со страховкой/без нее? –

+0

Да .. Мне нужно это сделать – youngji

+0

Вы должны добавить еще один 'UNION' со следующим' SELECT', содержащим 'COUNT()' и сделать его похожим на: 'WITH INSURANCE AS ''', 'TOTAL AS PATIENTNUM',' COUNT (...) AS PATIENTSURNAME' –

ответ

0
SELECT 
    'WITH INSURANCE' AS '', 
    PATIENTNUM, 
    PATIENTSURNAME, 
    (SELECT COUNT(*) FROM PATIENT tmp WHERE PATIENTNUM IN(select PATIENTNUM from INSURANCE_COVER) AND tmp.PATIENTNUM = p.PATIENTNUM) AS INSURANCES 
FROM 
    PATIENT p 
WHERE 
    PATIENTNUM IN(select PATIENTNUM from INSURANCE_COVER) 

UNION 

SELECT 
    'WITHOUT INSURANCE' AS '', 
    PATIENTNUM, 
    PATIENTSURNAME, 
    0 AS INSURANCES 
FROM 
    PATIENT 
WHERE 
    PATIENTNUM NOT IN(select PATIENTNUM from INSURANCE_COVER) 
+0

это должно использовать UNION ALL и, вероятно, быть более эффективным с использованием EXISTS или NOT EXISTS –

+0

Это просто добавленная строка в код, который уже был написан его владельцем. Поскольку он опубликовал UNION, он должен лучше знать, что ему нужно, и я не хочу с этим связываться. Мы не знаем о размере результатов подзапроса, поэтому я бы не пошел так далеко и начал заменять IN с помощью EXISTS, так как у нас нет всего дела. –

+0

Спасибо, я понимаю. Просто стоит отметить, что СОЮЗ дороже, особенно если он избыточен, как может быть здесь. Точно так же я нахожу, что IN (...) часто злоупотребляют, поскольку он недостаточно масштабируется, и EXISTS был написан на языке в начале для такого рода потребностей; Я не вижу никакой причины не упоминать об этом. –

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