Tsql:如果存在交叉连接问题



我有一个小问题:

Table   
Name: Table_test
       -------
Column: test
       -------
        test1
        test2 
        test3
Required Results
  test  |  test
 --------------
  test1 | test2

除了上面的预期结果外,我还需要查看值'test1'是否存在,如果不存在,则在其位置输出值'NONE'。我正在连接到微软SQL 2012服务器。下面是我到目前为止的代码:

SELECT a.test, b.test FROM (
IF EXISTS
(SELECT test FROM Table_test WHERE test='test1')
SELECT test FROM Table_test WHERE test='test1' 
ELSE 
SELECT test='NONE') a
CROSS JOIN
(SELECT test FROM Table_test WHERE test='test2') b;

IF EXIST…ELSE部分不起作用。

由于您不关心如何从给定的表中获得所需的结果,因此可以实现您的目标的更简单的重要查询之一是

SELECT *
FROM
  Table_test a
  CROSS JOIN Table_test b
WHERE a.test = 'test1' AND b.test = 'test2'

当然,很难看出这是如何推广到一个实际问题的,但这更多的是问题的特征,而不是答案的特征。

编辑添加:

要满足您的额外需求,您可以这样做:

SELECT
  CASE
    WHEN EXISTS(SELECT 1 from Table_test WHERE test = 'test1') THEN 'test1'
    ELSE 'NONE'
  END test,
  *
FROM
  Table_test
WHERE test = 'test2'

里面没有join,但是你不需要join来达到想要的结果。特别注意CASE 表达式——它产生一个值,在本例中是'test1'或'NONE'。相反,IF引入了一个tsql控制语句,该语句不产生值。您可以在存储过程的实现中使用IF语句,但通常不会在查询中使用。

最新更新