2

我真的不明白,尝试使用 coalesce() 但没有结果......

我有一个选择(非常简化以理解问题):

select col1, 
       col2 
from   table1 t1 
where  table1.col1='value' 
       and table1.col2='value2' 
       and table1.col3='value3'

我真的需要一个结果,所以如果这个选择结果集是空的(并且只有当它是空的)(没有结果)那么下面的 sql 选择就出现了

select col1, 
       col2 
from   table1 t1 
where  table1.col1='another_value' 
       and table1.col2='another_value2'

我怎样才能让这两个成为一个大选择?(任何推荐的语法都值得赞赏......)

4

4 回答 4

2

就像是:

; WITH Base AS (

    select col1, 
           col2 
    from   table1 t1 
    where  table1.col1='value' 
           and table1.col2='value2' 
           and table1.col3='value3'
)

, Base2 AS (

    select col1, 
           col2 
    from   table1 t1 
    where  table1.col1='another_value' 
           and table1.col2='another_value2'
           AND NOT EXISTS (SELECT 1 FROM Base) -- HERE!!!

)

SELECT * FROM Base
UNION
SELECT * FROM Base2

让我们希望 SQL 优化器不会运行第一个查询两次 :-) 它是一个 CTE(公用表表达式)...我使用它,所以我可以重复使用第一个查询两次(一个在 中EXISTS,另一个在 中SELECT ... UNION

通过使用临时表

select col1, 
       col2 
INTO   #temp1 -- HERE!!!
from   table1 t1 
where  table1.col1='value' 
       and table1.col2='value2' 
       and table1.col3='value3'

select col1, 
       col2 
from   table1 t1 
where  table1.col1='another_value' 
       and table1.col2='another_value2'
       AND NOT EXISTS (SELECT 1 FROM #temp1) -- HERE!!!
于 2013-08-09T16:36:17.607 回答
1

如果您在示例中提供更多信息,它可能会使我们受益更多。两个表之间是否存在可以建立 JOIN 的共同值?

SELECT  col1 
        ,col2  
FROM    Table1 t1
WHERE  table1.col1='value' 
   and table1.col2='value2' 
   and table1.col3='value3'  
UNION 
SELECT  col1 
        ,col2
FROM    Table2 t2 
WHERE  table1.col1='another_value' 
   and table1.col2='another_value2'
WHERE   NOT EXISTS (SELECT 1 FROM Table1 t1 WHERE t1.Col1 = t2.Col2)
于 2013-08-09T16:37:05.467 回答
0

这是我丑陋的解决方案。

select top 1 with ties
       col1, 
       col2
from   table1 
where  (
          col1='value' 
          and col2='value2' 
          and col3='value3'
       ) OR
       (
          col1='another_value' 
          and col2='another_value2'
       )
order by 
          CASE
          WHEN col1='value' 
                 and col2='value2' 
                 and col3='value3'
            THEN 1
            WHEN col1='another_value' 
                 and col2='another_value2'
            THEN 2 END

SQL 小提琴演示

于 2013-08-09T16:43:12.720 回答
0

您可以使用 COALESCE,如下所示:

select COALESCE (
(select col1, 
       col2 
from   table1 t1 
where  table1.col1='value' 
       and table1.col2='value2' 
       and table1.col3='value3')
,
(select col1, 
       col2 
from   table1 t1 
where  table1.col1='another_value' 
       and table1.col2='another_value2')
)
于 2013-08-09T16:38:27.390 回答