【问题标题】:Filtering duplicates [duplicate]过滤重复项[重复项]
【发布时间】:2021-09-27 22:22:08
【问题描述】:

我正在尝试“过滤”表格locationrelation 中的一些重复项。该表如下所示:

+-----+---------+--------+----------------+--------------+
| id  | version | typeId | fromLocationId | toLocationId |
+-----+---------+--------+----------------+--------------+
|   1 |       0 |      1 |             77 |           76 |
|   2 |       0 |      1 |             78 |           76 |
|   3 |       0 |      1 |             79 |           76 |
|   4 |       0 |      1 |             80 |           76 |
|   5 |       0 |      1 |              2 |          240 |
|   6 |       0 |      1 |              3 |          240 |
|   7 |       0 |      1 |              4 |          240 |
|   8 |       0 |      1 |              5 |          240 |
|   9 |       0 |      1 |              6 |          240 |
|  10 |       0 |      1 |              7 |          240 |
----------------------------------------------------------
| 492 |       0 |      1 |              6 |        10000 |

我试图只选择等于 240 并且只出现一次的 toLocationId。问题是我在此表中有一些重复项,如您在最后一行中所见。 (fromLocationId = 6 出现两次,第一次出现toLocationId=240,第二次出现toLocationId=1000)。

我尝试了以下查询:

select fromLocationId, toLocationId
from locationrelation
GROUP BY fromLocationId
HAVING COUNT(toLocationId) = 1; 

,但现在的问题是它显示的 toLocationId 的值不是 240。(见最后一行)

例子:

+----------------+--------------+
| fromLocationId | toLocationId |
+----------------+--------------+
|              1 |          240 |
|              9 |          240 |
|             11 |          240 |
|             33 |          240 |
|             38 |          240 |
|             42 |          240 |
|             51 |          240 |
|             63 |          240 |
|             67 |          240 |
|             72 |          240 |
|             85 |          240 |
|             97 |          240 |
|             98 |          240 |
|            107 |          240 |
|            121 |          240 |
|            146 |          240 |
|            186 |          240 |
|            196 |          240 |
|            198 |          240 |
|            212 |          240 |
|            228 |          240 |
|            244 |          240 |
|            245 |          240 |
|            251 |          240 |
|            253 |          240 |
|            254 |          240 |
|            257 |          240 |
|            258 |          240 |
|          10000 |          240 |
|          10002 |          240 |
|          10003 |          240 |
|          10008 |          240 |
|          10015 |           67 |
+----------------+--------------+

【问题讨论】:

    标签: mysql sql filter count duplicates


    【解决方案1】:

    没关系,我找到了解决方案。一个简单的工作,但我第一次使用AND 运算符时出错。 (可能查询有问题)

    select fromLocationId,toLocationId from locationrelation GROUP BY fromLocationId HAVING COUNT(toLocationId) = 1 and toLocationId = 240;
    

    【讨论】:

    • 此查询无效,当您升级到较新的 MySQL 版本时会引发错误。
    • @jarlh 这一切都取决于 sql 模式设置,只是交换了默认值以防止发生此类查询,而不是允许。
    • @Tr909:您甚至不需要 group by,如果上述解决方案适合您,只需一个 where 子句即可过滤。
    猜你喜欢
    • 2012-12-12
    • 2014-03-12
    • 1970-01-01
    • 2018-11-01
    • 2014-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多