【问题标题】:SQL: getting duplicate records with this querySQL:使用此查询获取重复记录
【发布时间】:2011-01-18 12:20:11
【问题描述】:

我有一个包含帖子、标签和 tag_ref 链接表的应用程序。我想查询具有特定标签关联的帖子。

数据库结构如下:

帖子

身份证

身体

city_id

tags_ref

row_id

表格

tag_id

标签

身份证

安全标签

标签

所以 tags_ref 是帖子和标签之间的链接表。

在为帖子添加一些标签后,我现在在查询中得到重复记录。

即使有这个查询:

SELECT P.* FROM posts as P WHERE P.city_id = 2

即使我没有在这里加入表格并且只查找 city_id 字段设置为 2 的帖子,但我仍然只会为具有关联标签的记录获取重复记录。

我也试过了:

DISTINCT (P.id), P.* FROM posts as P WHERE P.city_id = 2

我知道我的帖子表中只有 7 行,所以我知道实际上不存在重复记录,因为我正在计算 7 个不同的帖子。

谁能帮我找出我哪里出错了?

数据库是 MySQL

谢谢,

比利

【问题讨论】:

  • 你复制了多少帖子?
  • 你现在查询返回什么?请发布实际(非简化)查询和实际输出。
  • 这听起来不太可能,您能否发送帖子、标签的表结构以及一些重复的示例数据。
  • 这很奇怪,您是否确定当您对表执行简单的SELECT 时会得到重复的记录?就像帖子的重复 ID 一样?你有表帖子的主键吗?
  • 您的 tags_ref 表包含一个字段 row_id。此列是您引用表帖子/列 ID 的外键吗?您将哪些列用于primaryKey?你有身份列吗? Distinct 总是意味着完整的行 - 如此不同(P.id),p.* 并不意味着 p.id 是唯一的!请提供更多信息。

标签: sql join


【解决方案1】:
DISTINCT (P.id), P.* FROM posts as P WHERE P.city_id = 2

当其他字段中的某些值(在 P.* 中)不同时,您的 DISTINCT 不会执行任何操作。尝试在没有过滤器的情况下查询整个表的帖子,看看你真正得到了什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-21
    • 1970-01-01
    • 1970-01-01
    • 2014-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多