gpt4 book ai didi

sql - 如果第一个匹配没有行,则如何条件连接,使用第二个匹配

转载 作者:行者123 更新时间:2023-12-02 23:55:59 24 4
gpt4 key购买 nike

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

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

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

  2. 如果客户端表中不存在主表Id,则使用主表Idnumber来查找并匹配客户端表中的Idnumber。

下面是我想要实现的目标的示例:

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

enter image description here

在上面的场景中,我的脚本应始终仅选择客户端表 PKId 1,并通过匹配主表 Id 列和客户端表 ClientId 列来忽略客户端表中的行 PKId 2。

对于下面的另一种情况:

enter image description here

由于行 PKId 1 具有空 ClientId,并且无法匹配客户端表中的客户端 ID 10,因此我的脚本应使用主表 Idnumber 来查找并匹配客户端表中的记录,并通过以下方式获取行 PKId 2 Idnumber 列。

我想在连接条件下做一个案例,但不确定应该如何构建它。我正在考虑类似下面的内容(不是实际的 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)

如果您能就实现这一目标的任何替代方案向我提出建议,我将不胜感激。

最佳答案

您也可以使用 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

关于sql - 如果第一个匹配没有行,则如何条件连接,使用第二个匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39284705/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com