#sql #sql-server #subquery
#sql #sql-сервер #вложенный запрос
Вопрос:
Меня попросили отобразить результаты в моей базе данных sql server для следующего вопроса
Какие программные пакеты не установлены ни на одном компьютере HP? Я пробовал следующее, но я все еще получаю результаты для PACKNAME Manta, но этот пакет установлен на компьютере HP. Чего я не понимаю?
select * from package where PACK in
( select PACK from software where TAGNUM in
( select tagnum from PC where comp NOT in
( select comp from computer where MFRNAME = 'HP')))
Я прикрепил изображение данных для вашей справки ниже
Комментарии:
1. это выглядит как какой-то
homework
. Прежде чем мы попытаемся помочь вам с запросом, существует ли какой-либо конкретный метод запроса, который вы должны использовать или не можете использовать?2. Мне сказали использовать только вложенные запросы.
3. На любой запрос, который отвечает на вопрос «где что-то не существует», обычно лучше всего отвечать шаблоном NOT EXISTS (вложенный запрос). Делает его действительно простым для понимания и в целом эффективным для запуска. Я бы исследовал это.
4. mysql или sql-server? Это не одно и то же.
5. Это для Microsoft SQL server management studio 17
Ответ №1:
Вы можете использовать NOT EXISTS
с коррелированным вложенным запросом, который объединяет другие таблицы вместе и содержит ваше условие фильтрации:
select
pk.pack,
pk.packname,
pk.packv,
pk.packtype,
pk.packcost
from package pk
where not exists (
select 1
from software s
inner join pc on pc.tagnum = s.tagnum
inner join computer c on c.comp = pc.comp
where s.pack = pk.pack
and c.mfrname = 'HP'
)
order by pk.pack;
Результат
| pack | packname | packv | packtype | packcost |
|------|------------------|-------|-----------------|----------|
| AC11 | Quick Accounting | 4.1 | Accounting | 754.95 |
| AC12 | Accounting MIS | 4.0 | Accounting | 2000 |
| AC13 | Quickbook | 2005 | Accounting | 300 |
| DB11 | Manta | 1.5 | Database | 380 |
| DB13 | SQL Server | 2005 | Database | 500 |
| DB14 | My SQL | 2005 | Database | 300 |
| SS11 | Easycal | 5.5 | Spreadsheet | 225.15 |
| WP04 | Word Power | 2 | Word Processing | 118 |
| WP07 | Good Word | 3.2 | Word Processing | 35 |
| WP14 | GOOGLE | 2 | Word Processing | 118 |
Ответ №2:
;with installed as
( select PACK from software where TAGNUM in ( select tagnum from PC where comp in ( select comp from computer where MFRNAME = 'HP')))
select * from Package p left join installed i on p.pack = i.pack
where i.pack is null
Комментарии:
1. Спасибо за быстрый ответ, но я все еще получаю результат с именем ПАКЕТА MANTA в списке.
2. Тогда он должен быть в списке. вы проверили?
3. ДА. Manta установлена на компьютере HP, связанном с ПАКЕТОМ DB22, но вопрос сформулирован таким образом, что он ищет все пакеты, которые не установлены ни на одном компьютере HP