我试图找出是否可以根据一个表中的布尔标志选择性地包含或省略某些表中的内容。
有2个表格有问题,我想做以下几点:
SELECT id, isValid From Table1
If isValid = true THEN select * from Table2
基本上,如果给定字段为true,则在主select
语句中包含另一个select语句,否则不包括。
这可能吗?
更新 只是为了让它更清晰 - 并试着解释我想要实现的目标。
表1包含13个字段,而表2包含4个字段。两个表都有一个关系,使用id(不是真实姓名,仅在本例中使用)。
因此,只要表1中的字段isValid设置为true,那么我需要表2中id匹配的所有相应信息。如果isValid为false,则不要从表2中选择任何内容
答案 0 :(得分: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
中具有匹配有效记录的行。
编辑:
我怀疑你只想要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
。
答案 1 :(得分:1)
表1中的所有记录和表2中ID匹配的所有记录和表1中的IsValid都是真的。
Select
t1.*,t2.*
FROM Table1 t1
LEFT JOIN Table2 t2 ON t1.ID=t2.ID AND t1.IsValid=1
答案 2 :(得分:-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