Intereting Posts
Postgres Копирование из переменной с данными CSV SQLite changes () учитывает не изменяющиеся UPDATE Группировка по времени Выберите строки с максимальным значением, сгруппированные по двум столбцам Как сохранить результат SQL-запроса в переменной в VBA? Как я могу вставить значение в указанный столбец вместе с другими столбцами, не введя его в новую другую строку? Получение дополнительных строк – После подключения 3-х таблиц с помощью Left Join Невозможно открыть базу данных, так как это версия 706. Этот сервер поддерживает версию 655 и ранее. Не поддерживается нисходящий путь Использование SQL для определения статистики слов в текстовом поле Как обновить несколько столбцов подзапросом в одном заявлении? Oracle конвертирует строки в столбцы Как вы разделяете данные из одного столбца на два? Избавление от «Использование временных; Использование filesort " Расширенные запросы Linq с несколькими столбцами Если класс имеет строковые поля для значений из SQL JOIN из таблиц словаря

SQL с использованием подзапросов вместо объединения для одного

Я пытаюсь создать выбор, который позволит мне объединить две таблицы вместе без использования какой-либо операции, использующей JOIN. Уловка состоит в том, что эти две таблицы содержат отношения от одного до многих.

Допустим, есть две таблицы, отдел и курс.

отдел
D_CODE | ШКОЛА
01 | 1111
02 | 1111
03 | 2222

Курс
CRS_CODE | D_CODE
MATH1 | 01
MATH2 | 02
ACCT1 | 03

Как найти все школы и общее количество курсов, которые он предоставляет, без какого-либо соединения?
В результате школа 1111 имеет 2 курса, а в школе 2222 – 1 курс.
Я попытался использовать WITH и несколько подзапросов, но результирующие значения всегда дублируются. Таким образом, скажем, школа 1111 имеет 16 курсов, а в школе 2222 – 16 курсов (в качестве примера).

Руководство будет высоко оценено. Спасибо!

Попробуй это. Без использования sub-query в Where condition вы также получите тот же результат.

 SELECT Count(D_CODE) No_OF_Course, SCHOOL FROM Department WHERE D_CODE IN(SELECT D_CODE FROM course) GROUP BY SCHOOL 

Но вы можете избежать подзапросов и явных объединений: используйте SELECT для нескольких таблиц (какое-то неявное объединение). Этот код не проверен, но, вероятно, будет работать:

 SELECT COUNT(*) FROM course, department WHERE course.D_CODE = department.D_CODE 

Изменить: комментатор утверждает, что это утверждение неверно и звучит разумно: вы знаете, что подзапросы очень дороги и убьют производительность вашего сервера баз данных? При необходимости используйте объединения.