if ... else在sql中

时间:2012-06-27 07:05:29

标签: sql tsql

我是SQL的初学者并且有一个相当容易的条件问题:数据库中的每个安装号都有一个客户。但我被告知客户在AUDEB表或AFORD表中。我应该首先在AUDEB中查找CUSTOMER_NO并使用它,如果它不是NULL。如果为NULL,则从AFORD表中获取CUSTOMER_NO。

如果CUSTOMER_NO不为NULL,请使用此

  SELECT CUSTOMER_NO
  FROM AUDEB
  WHERE INST_NO = 2

否则请使用此CUSTOMER_NO

  SELECT CUSTOMER_NO
  FROM AFORD
  WHERE INST_NO = 2

我看到SQL中存在IF ... ELSE条件,但是如果结果不为null,那么在两个查询的值之间选择我想要使用第一个的更简单方法,否则使用其他

3 个答案:

答案 0 :(得分:3)

您可以使用子查询union表来检索完整的客户列表:

select  CUSTOMER_NO
from    (
        select  CUSTOMER_NO
        ,       INST_NO
        from    AUDEB
        union all
        select  CUSTOMER_NO
        ,       INST_NO
        from    AFORD
        ) as all_customers
where   INST_NO = 2

答案 1 :(得分:2)

如果两个表遵循相同的模式,并且customrer_no中没有重叠,则可以使用UNION:

SELECT T.CUSTOMER_NO
  FROM (SELECT CUSTOMER_NO, INST_NO FROM AUDEB
        UNION
        SELECT CUSTOMER_NO, INST_NO FROM AFORD) AS T
  WHERE T.INST_NO = 2

或者,如果inst_no可以在两个表中,则加入它们(即使模式不同)

SELECT COALESCE(T1.Customer_no, T2.CUSTOMER_NO)
FROM AUDEB as T1
FULL OUTER JOIN AFORD as T2
ON T1.INST_NO = T2.INST_NO
WHERE T1.INST_NO = 2 OR T2.INST_NO = 2

COALESCE将返回第一个非空结果

答案 2 :(得分:1)

只需连接两个表并使用ISNULL()从相应的表中获取值。

SELECT ISNULL(A.CUSTOMER_NO, B.CUSTOMER_NO) AS CUSTOMER_NO
  FROM AUDEB A INNER JOIN AFORD B
    ON A.INST_NO = B.INST_NO
 WHERE A.INST_NO = 2

编辑:这假定INST_NO是主键,但现在注释中已经说明它不是。 OP应该使用正确的字段来连接这两个表。