如果第一个匹配没有行,如何进行条件连接,请使用第二个匹配

Koo*_*eng 5 sql t-sql sql-server

我的客户表中有一些特殊的行以这种方式工作。有多个客户记录属于同一客户,但列值略有不同。这些表属于它们,我无法更改其表中的任何内容,因此我必须处理脚本来处理此问题。

现在,我需要比较主表中的客户数据并从客户表中获取数据。条件如下:

  1. 如果客户端表中存在主表ID,则获取与主表ID列匹配的唯一记录

  2. 如果客户端表中不存在主表ID,请使用主表IDnumber查找并匹配客户端表中的IDnumber。

以下是我要实现的示例:

假设此数据存在于下面的主表和客户表中:

在此处输入图片说明

在上述情况下,我的脚本应始终仅选择客户端表PKId 1,并通过匹配主表ID列和客户端表ClientId列来忽略客户端表中的行PKId 2。

对于下面的另一种情况:

在此处输入图片说明

由于行PKId 1的客户ID为空,并且无法与客户表中的客户ID 10相匹配,因此我的脚本应使用主表Idnumber来查找并匹配客户表中的记录,并通过Idnumber列获取行PKId 2 。

我想在连接条件下做一个案例,但不确定如何构造它。我正在考虑以下内容(不是实际的SQL语句,只是一些想法):

Select 
    c.Id, c.Name, c.AuthorizeToken 
From 
    Client c 
Left Join 
    Main m on (If m.Id = c.ClientId has data return, get AuthorizeToken from that row only;
 else if m.Id = c.ClientId has no data return, use m.Idnumber = c.Idnumber     
 to find and get AuthorizeToken) 
Run Code Online (Sandbox Code Playgroud)

赞赏是否可以为我提供任何其他建议以实现这一目标。

Sus*_*ang 5

您也可以改用LEFT JOIN

SELECT m.id, ISNULL(c.authorize_token, c1.authorize_token) authorize_token
FROM main m
LEFT JOIN client c ON m.id = c.client_id
LEFT JOIN client c1 ON m.idnumber = c1.idnumber
Run Code Online (Sandbox Code Playgroud)