我是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,那么在两个查询的值之间选择我想要使用第一个的更简单方法,否则使用其他
答案 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应该使用正确的字段来连接这两个表。