gpt4 book ai didi

mysql - 如何比较同一张表中的记录列?

转载 作者:可可西里 更新时间:2023-11-01 06:44:40 26 4
gpt4 key购买 nike

这是我的测试表数据:

测试

ID      Name            Payment_Date   Fee                Amt
1 BankA 2016-04-01 100 20000
2 BankB 2016-04-02 200 10000
3 BankA 2016-04-03 100 20000
4 BankB 2016-04-04 300 20000

我正在尝试比较每个数据记录的名称、费用和金额字段,看是否有相同的值。如果他们获得相同的值(value),我想在这些记录上标记“Y”之类的东西。这是预期的结果

ID      Name            Payment_Date   Fee                Amt      SameDataExistYN
1 BankA 2016-04-01 100 20000 Y
2 BankB 2016-04-02 200 10000 N
3 BankA 2016-04-03 100 20000 Y
4 BankB 2016-04-04 300 20000 N

下面这两种方法我都试过了。但我正在寻找任何其他解决方案,以便我可以为我的工作挑选出最好的解决方案。

方法一。

select t.*, iif((select count(*) from testing where name=t.name and fee=t.fee and amt=t.amt)=1,'N','Y') as SameDataExistYN from testing t

方法二。

select t.*, case when ((b.Name = t.Name)
and (b.Fee = t.Fee) and (b.Amt = t.Amt)) then 'Y' else 'N' end as SameDataExistYN
from testing t
left join ( select Name, Fee, Amt
from testing
Group By Name, Fee, Amt
Having count(*)>1 ) as b on b.Name = t.Name
and b.Fee = t.Fee
and b.Amt = t.Amt

最佳答案

有几种方法,在性能特征上有所不同。

一个选项是运行相关子查询。如果您有合适的索引,并且拉取的行数相对较少,则此方法最适合。

SELECT t.id
, t.name
, t.payment_date
, t.fee
, t.amt
, ( SELECT 'Y'
FROM testing s
WHERE s.name = t.name
AND s.fee = t.fee
AND s.amt = t.amt
AND s.id <> t.id
LIMIT 1
) AS SameDataExist
FROM testing t
WHERE ...
LIMIT ...

当至少找到一个“匹配”行时,SELECT 列表中的相关子查询将返回 Y。如果未找到“匹配”行,则 SameDataExist 列的值为 NULL。要将 NULL 转换为“N”,您可以将子查询包装在 IFULL() 函数中。


您的方法 2 是一种可行的方法。 SELECT 列表中的表达式不需要做所有那些比较,那些已经在连接谓词中完成了。您只需要知道是否找到匹配的行...只需测试其中一列的 NULL/NOT NULL 就足够了。

SELECT t.id
, t.name
, t.payment_date
, t.fee
, t.amt
, IF(s.name IS NOT NULL,'Y','N') AS SameDataExists
FROM testing t
LEFT
JOIN ( -- tuples that occur in more than one row
SELECT r.name, r.fee, r.amt
FROM testing r
GROUP BY r.name, r.fee, r.amt
HAVING COUNT(1) > 1
) s
ON s.name = t.name
AND s.fee = t.fee
AND s.amt = t.amt
WHERE ...

您还可以使用 EXISTS(相关子查询)

关于mysql - 如何比较同一张表中的记录列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36783102/

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