我想编写一个执行以下操作的SQL查询:
if
此查询(select X from table1 where x = 'value1')
的结果返回1 else if (select x from table2 where x = 'value2')
有任何结果返回2,否则返回0。
由于
答案 0 :(得分:7)
一种方法是select
和case
:
select (case when exists (select X from table1 where x = 'value1')
then 1
when exists (select x from table2 where x = 'value2')
then 2
else 0
end) as flag
答案 1 :(得分:1)
是否可以使用变量实现:
DECLARE @FLAG INT = 0;
SELECT @FLAG = 1 FROM table1 WHERE x = 'value1'
IF @FLAG = 0
BEGIN
SELECT @FLAG = 2 FROM table2 WHERE x = 'value2'
END
SELECT @FLAG
@FLAG
变量将保留值0,1或2,因为表包含或不包含数据。如果第一个选择不包含数据,则运行第二个,如果没有返回数据,则返回0(默认@FLAG
值)。
答案 2 :(得分:0)
虽然它不是一种有效的查询,也不是使用这类查询的最佳做法,但这应该有效。
select
case when exists (select X from table1 where x = 'value1') then 1
when exists (select x from table2 where x = 'value2') then 2
else 0
end;
答案 3 :(得分:0)
当查询很短时,选择案例是解决这种情况的更好方法。但是当查询很长且很复杂时,我喜欢使用用户定义的函数,如:
如果dbo.QueryExecution()为空 - 做一点事 其他 - 什么东西
dbo.QueryExecution()可以执行您的查询 从table1中选择X,其中x ='value1'。
通过这种方式,可以更轻松地测试和维护查询(至少对我来说更容易)。