修复 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
中的每个 Identifier
,Amount
和 Date
值是相同的。
您的 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
)。
所以我在 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
中的每个 Identifier
,Amount
和 Date
值是相同的。
您的 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
)。