修复 Join table 函数或不重复值?

Fix Join table functions or not duplicate values?

所以我在 NaviCat 中有一个查询,它有一个看起来像这样的部分:

case
when base.table = 1 then Table1.Name
when base.table = 2 then Table2.Name
when base.table = 3 then Table3.Name
when base.table = 4 then Table4.Name 
end as Name

因为 Base table 有识别码,但不包含人名。它已正确连接并正常工作。但是,在某些情况下,它会将某些行增加三倍。

我可以得到类似于此的回复

Identifier         Amount              Name
12                 1000                Smith, Suzy
12                 1000                Smith, John
12                 1000                Smith, John & Smith, Suzy

我希望只有 return 最长的条目(因为所有的名字要么是丈夫、妻子,要么是丈夫和妻子),因为所有的金额都是一样的,我认为这是因为我我将 Base table 连接到 Table1、Table2 等。但是我该如何解决这个问题?是否有仅 return 最长名称的功能?

我正在查看一些与此类似的左连接。

Left join server.table1 as Table1 on Base.Identifier = Table1.Identifier AND Base.Date = Table1.Date

每个 table1-table4 具有相同的加入代码。

我只能提供一个"raw" SQL的解决方案,因为我没用过NaviCat.
下面的解决方案假设对于 table1-table4 中的每个 IdentifierAmountDate 值是相同的。
您的 FROM 应更改为:

left join (
    select Identifier, Amount, Date, MAX(LEN(Name)) as LongestName
    from server.table1
    group by Identifier, Amount, Date
    UNION ALL
    select Identifier, Amount, Date, MAX(LEN(Name)) as LongestName
    from server.table2
    group by Identifier, Amount, Date
    UNION ALL
    select Identifier, Amount, Date, MAX(LEN(Name)) as LongestName
    from server.table3
    group by Identifier, Amount, Date
    UNION ALL
    select Identifier, Amount, Date, MAX(LEN(Name)) as LongestName
    from server.table4
    group by Identifier, Amount, Date
    ) as tables1to4 on Base.Identifier = tables1to4.Identifier AND Base.Date = tables1to4.Date

你的 case 表达式只变成

tables1to4.LongestName as Name

同样适用于Amount,如果最终结果需要它(不需要case)。