2015-09-03 2 views
-1

Я пытаюсь выяснить, могу ли я выборочно включать или опускать контент из определенных таблиц на основе булевого флага в одной таблице.расшифровывать инструкцию TSQL Select, основанную на значении bool

Есть 2 таблицы в вопросе, и я хотел бы сделать следующее:

SELECT id, isValid From Table1 

If isValid = true THEN select * from Table2 

В принципе, если данное поле так, то включить другой оператор выбора, в главном select заявления, в противном случае нет.

Возможно ли это?

UPDATE Просто, чтобы сделать его немного яснее - и попытаться объяснить, что я пытаюсь добиться.

Таблица 1 содержит 13 полей, а таблица 2 содержит 4 поля. Обе таблицы имеют отношение, используя id (а не настоящее имя, просто используемое в этом примере).

Итак, всякий раз, когда для поля isValid установлено значение true в таблице 1, мне нужна вся соответствующая информация из таблицы 2, где совпадает идентификатор. Если IsValid ложно, то Dont выбрать что-нибудь из таблицы 2

+0

Вы не могли бы хранить истинное логическое значение, вы должны либо иметь «истина» и «ложь», как VARCHARS или вы могли бы использовать немного и установить 1, как истинный и 0 как ложное –

+4

Не могли бы вы показать некоторые примеры данных и ожидаемый результат? –

+0

Thorsten, это просто исследовательский момент. Я хочу посмотреть, возможна ли моя задача в SQL раньше, перейдя в другие области. – CSharpNewBee

ответ

2

Вы можете сделать это с union all:

select id, isValid 
From Table1 t1 
union all 
select id, isValid 
from Table2 t2 
where exists (select 1 from table1 t1 where t1.id = t2.id and t1.isValue = true); 

Это выбирает все строки из Table1, а затем только те строки из Table2, которые имеют соответствие действительной записи в Table1.

EDIT:

Я подозреваю, что вы просто хотите left join:

select t1.*, t2.* 
from table1 t1 left join 
    table2 t2 
    on t1.id = t2.id and t1.isvalid = true; 

Это возвращает все столбцы из обеих таблиц. Если isvalid не соответствует действительности (или нет совпадения в table2), то столбцы table2: NULL.

+0

Привет, Гордан, спасибо за ответ. это не проблема со связанными записями, более того, добавление в существующий оператор select, основанный на булевом флаге. Как сказано выше, попытался объяснить. if table1.IsValid = true, затем выберите * из таблицы2 и включите в исходный оператор. – CSharpNewBee

+0

Также, чтобы добавить. этот подход потребовал бы, чтобы операторы были равны, то есть то же количество полей в обеих таблицах - это не случай для этой ситуации. Таблица 1 содержит 13 полей, Таблица 2 содержит 4. – CSharpNewBee

+2

@CSharpNewBee. , , Тогда ваш вопрос не имеет смысла. Оператор SQL может возвращать только фиксированный набор столбцов, а не другой набор для каждой строки. –

-1

попробовать

Select id 
case when isvalid = true then select * from table 2 
from table1 
left join table 2 on table1.id=table2.id 

it really depends if is valid values is populated with string or int 
+0

Привет, Джеймс, это выглядит недействительным SQL – CSharpNewBee

1

Все записи из таблицы 1 и все записи из таблицы 2, где матч идентификаторы и IsValid в таблице 1 верно.

Select 
    t1.*,t2.* 
FROM Table1 t1 
LEFT JOIN Table2 t2 ON t1.ID=t2.ID AND t1.IsValid=1 
+0

Призрак возвращает все строки (20), для таблицы 1 с каждым значением для таблицы 2 null, даже для одной строки в таблице 1, где isValid is 1. Если я перехожу на присоединитесь к Right Join, затем я получаю одну строку с информацией, которая мне нужна из таблицы 2, и ничего для таблицы 1 – CSharpNewBee

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