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

6 浏览
0 Comments

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

这是我的测试表数据:\n测试\n

ID      名称            付款日期   费用                金额
1       银行A           2016-04-01     100                20000
2       银行B           2016-04-02     200                10000
3       银行A           2016-04-03     100                20000
4       银行B           2016-04-04     300                20000

\n我想比较每个数据记录的名称、费用和金额字段,看看是否有相同的值。如果它们有相同的值,我想在这些记录上标记一些像\'Y\'的东西。以下是预期的结果:\n

ID      名称            付款日期   费用                金额      有相同数据存在
1       银行A           2016-04-01     100                20000    Y
2       银行B           2016-04-02     200                10000    N
3       银行A           2016-04-03     100                20000    Y
4       银行B           2016-04-04     300                20000    N

\n我尝试了下面这两种方法。但我正在寻找其他解决方案,以便我可以选择最好的方法来完成我的工作。\n方法1.\n

select t.*, iif((select count(*) from testing where name=t.name and fee=t.fee and amt=t.amt)=1,'N','Y') as 有相同数据存在 from testing t

\n方法2.\n

select t.*, case when ((b.名称 = t.名称)
                        and (b.费用 = t.费用) and (b.金额 = t.金额)) then 'Y' else 'N' end as 有相同数据存在
from testing t
left join ( select 名称,  费用, 金额
            from testing
            Group By 名称,  费用, 金额
            Having count(*)>1  ) as b on b.名称 = t.名称
                                      and b.费用 = t.费用
                                      and b.金额 = t.金额

0
0 Comments

这是另一种方法,但我认为您需要对数据运行测试以找出哪种方法最好:

SELECT
  t.*,
  CASE WHEN EXISTS(
    SELECT * FROM testing WHERE id <> t.id AND Name = t.Name AND Fee = t.Fee AND Amt = t.Amt
  ) THEN 'Y' ELSE 'N' END SameDataExistYN
FROM
  testing t 
;

哇!这个方法完美运行,比我以前的方法还要快。谢谢你。

原因:问题的出现可能是因为用户需要比较同一张表中的不同记录的列。

解决方法:通过使用上述给出的SQL查询语句,用户可以从同一张表中比较不同记录的列。该查询语句使用了CASE语句和EXISTS子查询。它首先选择了表中的所有列,并根据以下条件判断是否存在相同的数据:id不等于t.id,Name等于t.Name,Fee等于t.Fee,Amt等于t.Amt。如果满足这些条件,将返回'Y',否则返回'N'。通过执行这个查询,用户可以找出是否存在相同的数据,并将结果与原始数据一起返回。这种方法经过测试,效果良好且速度更快。

0
0 Comments

有时候,在同一张表中对比不同列的记录是非常有用的。这可能是为了找到重复的记录,或者为了比较不同列之间的差异。在这种情况下,我们可以使用SQL查询来实现这一目的。

一个用户在Stack Overflow上提出了一个关于如何比较同一张表中的列的记录的问题。他在问题中提到了一个链接,该链接是关于如何选择某些字段上的重复记录的。

为了解决这个问题,我们可以使用SELECT语句和GROUP BY子句来比较同一张表中不同列的记录。下面是解决这个问题的步骤:

1. 确定需要比较的列。在这种情况下,我们需要比较的是同一张表中的不同列。

2. 使用SELECT语句从表中选择需要比较的列。例如,SELECT column1, column2 FROM table_name。

3. 使用GROUP BY子句将结果按照需要比较的列进行分组。例如,GROUP BY column1, column2。

4. 使用HAVING子句选择满足特定条件的记录。例如,HAVING COUNT(*) > 1可以选择有重复的记录。

5. 运行查询并查看结果。这将显示具有重复值的记录。

在上述解决方法中,我们使用SELECT语句选择需要比较的列,并使用GROUP BY子句对结果进行分组。然后,我们使用HAVING子句选择满足特定条件的记录。最后,我们运行查询并查看结果。这样,我们就可以比较同一张表中不同列的记录了。

总结起来,要比较同一张表中不同列的记录,我们可以使用SELECT语句、GROUP BY子句和HAVING子句来实现。这样,我们可以找到重复的记录或者比较不同列之间的差异。

0
0 Comments

问题的出现原因:该问题是因为需要对同一表中的不同列进行比较而产生的。

解决方法:

1. 使用相关子查询。适用于在有适当索引的情况下,拉取相对较少的行。在SELECT列表中的相关子查询将在至少找到一个“匹配”行时返回Y。如果找不到“匹配”行,则SameDataExist列的值为NULL。可以使用IFNULL()函数将NULL转换为N。

2. 使用LEFT JOIN和IF函数。在SELECT列表中的表达式不需要进行所有这些比较,因为这些比较已经在连接谓词中完成。只需要知道是否找到了匹配的行,只需测试一个列是否为空/非空即可。

3. 使用EXISTS (相关子查询)。

0