2016-07-26 3 views
2

Я относительно новичок в программировании SQL, поэтому, пожалуйста, пройдите на меня.SQL Left/Inner/Normal Join vs Where while условное утверждение

В настоящее время я пишу запрос, который выводит результат на основе значения из одного из внешних параметров. Структура в настоящее время выглядит как следующее:

@ShowEntireCategory bit = 0 

select distinct 
p.pk 
p.name 
--other columns 
from dbo.Project P 
--bunch of left joins 
where p.Status = 'Open' 
--other conditions 

То, что я пытаюсь выполнить: когда значение ShowEntireCategory является 1 (изменено программным путем выбора RadioButton) он покажет запись всех подкатегорий, которые находятся внутри категории. Когда он равен 0, он будет показывать только записи из выбранной подкатегории, в то время как другие подкатегории в этой категории остаются нетронутыми.

Я выполнял a research на лучший подход, и это narrowed down либо к WHERE заявления или JOINs.

Что я хочу знать: какой из этих подходов я должен использовать для своего сценария? В моем случае приоритетом является оптимизация (минимальное время выполнения) и простота реализации.

Примечание: Моя главная цель здесь не получить готовый к использованию код здесь (хотя приведен пример фрагмента кода будет приветствоваться), я просто хочу знать, лучший подход, так что я могу продолжать исследования в этом направлении ,

Спасибо заранее!

UPDATE

Я выполнил дополнительные исследования на структуре базы данных, и удалось сузить параметры, имеющие отношение к вопросу

One является dbo.Project таблица, которая содержит: PK, CategoryKey (FK) (подключен ко второй таблице), Имя, Описание и все другие параметры, которые не имеют отношения к делу.

Второй столбец dbo.Area, содержащий: PK, AreaNumber, Name, CategoryKey (FK), IsCategory (1 = категория, 0 = не категория).

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

+0

Это будет зависеть от того, как категории и подкатегории хранятся в базе данных. – BrandonM

+0

@BrandonM Уточнить? Единственный способ, которым я могу ответить прямо сейчас, - «4 подкатегории в пределах 1 категории, причем каждая подкатегория имеет свой собственный идентификатор». –

+0

Можете ли вы предоставить структуру своих таблиц и некоторые данные образца?Идеализируйте как sql-инструкции, чтобы мы могли настроить среду для тестов. – Philipp

ответ

0

С предоставленной вами информацией лучшим решением было бы использовать комбинацию предложений WHERE и JOINS. Вероятно, вам нужно будет использовать предложение WHERE во второй таблице (описано в обновлении), чтобы выбрать все строки, которые являются категориями. Затем вы присоедините этот результат к другим таблицам/данным. Наконец, вы можете использовать предложение CASE (подробности найдено here), чтобы проверить вашу переменную и определить, нужны ли вам все категории или просто некоторые (которые могут быть рассмотрены с помощью дополнительного предложения WHERE).

Не уверен, что это полностью отвечает на ваш вопрос, но для более подробного ответа нам потребуется более подробное описание схемы базы данных.

+0

Извините, если это недостаточно детально. Но я приму ваш ответ и проведу дополнительные исследования. –