我经常发现自己需要从两个不同的表tableA和tableB中选择一个值。如果tableA中存在某个记录,我从tableA中获取值。如果记录不存在,我需要来自tableB的值。
我正在使用ERP应用程序,如果用户在输入销售订单时更改了默认的交运地址,则该应用程序将在销售订单交运地址表中创建基于事件的记录。如果用户未更改交运地址,系统会假定产品正在运送到客户文件上的地址,并且不会向销售订单交运地址写入任何内容。我需要每个销售订单发货的收货地址,但我不能直接从tableA或tableB抓取它。
我过去做过的事情是这样的:
SELECT
CASE
WHEN isnull(tableA.SalesOrderNumber, 'StackOverflow') = 'StackOverflow'
THEN tableB.address1
ELSE tableA.address1
END AS address1
哪个有效。但是你最后会为具有类似逻辑的每个字段反复重复同样的事情,这很糟糕,但如果你要检查的值(SalesOrderNumber
)是基于字符的数据和/或a,那么它是不可行的首要的关键。如果我要检查的值不是主键,或者它是数字类型数据,那么这种方法变得更加脆弱。
必须有更好的方法,对吧?
我使用EXISTS
运算符尝试了几种不同的方法,但无处可去。
答案 0 :(得分:1)
如果我理解了您的任务,您可以加入tableA
以检查是否存在特定记录 - 如果记录不存在,您将获得NULL
加入的值,否则您需要&#39 ;有一些价值。然后,如果NULL
值,您可以使用tableB
中的值替换它。像这样:
SELECT COALESCE(tA.address1, tB.address1, N'N/A') AS address1
FROM tableWithSalesOrderNumbers AS tWSON
LEFT JOIN tableA AS tA
ON tA.SalesOrderNumber = tWSON.SalesOrderNumber
LEFT JOIN tableB AS tB
ON tB.SalesOrderNumber = tWSON.SalesOrderNumber