【发布时间】:2018-04-26 02:13:03
【问题描述】:
我的表结构如下所示。数据库是 MariaDB。
+-----------+----------+--------------+-----------------+
| id_object | name | value_double | value_timestamp |
+-----------+----------+--------------+-----------------+
| 1 | price | 1589 | null |
| 1 | payment | 1590 | null |
| 1 | date | null | 2012-04-17 |
| 2 | price | 1589 | null |
| 2 | payment | 1590 | null |
| 2 | date | null | 2012-04-17 |
| 3 | price | 1589 | null |
| 3 | payment | 1590 | null |
| 3 | date | null | 2012-09-25 |
| ... | ... | ... | .. |
+-----------+----------+--------------+-----------------+
1) 我需要通过三个条目获取重复项:价格、付款和日期;
例如:id_object=2 的记录是重复的,因为价格、付款和日期与 id_object=1 的记录的值相同。 id_object = 3 的记录不是重复的,因为日期不同 (2012-09-25 != 2012-04-17)
2)我应该删除除了一份副本之外的重复项。
我想进行三个选择操作并在 id_object 上加入每个选择。我可以通过一个条目(价格 | 付款 | 日期)获得副本。我在连接时遇到了问题
SELECT `id_object`,`name`,{P.`value_double` | P.`value_timestamp`}
FROM record P
INNER JOIN(
SELECT {value_double | value_timestamp}
FROM record
WHERE name = {required_entry}
GROUP BY {value_double | value_timestamp}
HAVING COUNT(id_object) > 1
)temp ON {P.value_double = temp.value_double | P.value_timestamp = temp.value_timestamp}
WHERE name = {required_entry}
有人可以帮助并展示纯粹(更好)的解决方案吗?
【问题讨论】:
-
使用 EAV 模型时,我更喜欢根据数据类型将属性分离到单独的表中,这样您就不会最终得到所有这些空值。
-
你能给出预期的结果吗?
-
分组依据无效。不会在较新的 MySQL 版本上执行(除非在兼容模式下),可能会在较旧的 MySQL 版本上返回不可预测的结果。一般的 GROUP BY 规则说:如果指定了 GROUP BY 子句,则 SELECT 列表中的每个列引用必须要么标识一个分组列,要么是一个集合函数的参数!
标签: mysql sql duplicates