1

在几个小时前我问的上一个问题的上下文中: -

为每个不同类型的列提取多个相似的行

一些乐于助人的人给了我一个聪明的解决方案。我将解决方案映射到我的数据库表上,这与我为该问题设计的虚拟表几乎相同。但不幸的是,查询在我的原始表上给出了错误的输出。我相信这是一个快速修复,我无法发现它。

一些有用的 SO 用户给我的解决方案:-

http://sqlfiddle.com/#!2/0472b/1

在我映射解决方案之后: -

http://sqlfiddle.com/#!2/082d9/1

我的表的正确输出是:-

+---+--------------+-------------------------------+--------------+-------------+-----+
| d | Johnny Bravo | August, 27 2013 00:00:00+0000 |     NAB      | Same Amount | 150 |
+---+--------------+-------------------------------+--------------+-------------+-----+
| d | Courage Dog  | August, 27 2013 00:00:00+0000 | Commonwealth | Same Amount | 150 |
+---+--------------+-------------------------------+--------------+-------------+-----+

这个问题更像是一个点差图像:D

4

1 回答 1

1

当我看到原始解决方案时,我在想“如果第 2 列和第 3 列中有重复项怎么办”。瞧,这就是问题所在。这是适用于您的 SQL Fiddle 的修改后的查询:

SELECT ht.*
FROM helper_table ht INNER JOIN
     (SELECT `date`, `amount`
      FROM helper_table ht
      GROUP BY `date`, `amount`
      HAVING  COUNT(distinct `name`) = (SELECT COUNT(DISTINCT `name`) FROM helper_table)
     ) da
     ON ht.`date` = da.`date` AND
        ht.`amount` = da.`amount`;

这仍然假定字段dateamount不包含NULL值(或者,至少 NULL 值不匹配)。

于 2013-09-12T21:25:42.483 回答