【问题标题】:Why does SQL query return two rows when only one exists?为什么 SQL 查询只存在一行时返回两行?
【发布时间】:2011-04-28 16:02:16
【问题描述】:

我编写了一个内部连接来从一个数据库中的三个表中提取信息。当我运行查询时,我得到两行返回,第二行是第一行的副本。我希望只返回一行?

查询:

mysql> SELECT euroapps.id, euroapps.name, euroapps.imageurl, euroapps.website,
   euroapps.developer, euroapps.description, euroapps.created, euroapps.iphone,
   euroapps.ipodtouch, euroapps.ipad,  app_detail.screen1 , app_detail.screen2,
   app_detail.screen3, app_detail.screen4, application_price.retail_price
FROM euroapps INNER JOIN app_detail ON euroapps.id = app_detail.id
 INNER JOIN application_price ON euroapps.id= application_price.application_id
 WHERE euroapps.id = 353783927;

返回两行,而这一行只返回一行(和预期的一样)

mysql> SELECT euroapps.id, euroapps.name, euroapps.imageurl, euroapps.website,
euroapps.developer, euroapps.description, euroapps.created, euroapps.iphone,
euroapps.ipodtouch, euroapps.ipad,  app_detail.screen1 , app_detail.screen2,
app_detail.screen3, app_detail.screen4
FROM euroapps INNER JOIN app_detail ON euroapps.id = app_detail.id
WHERE euroapps.id = 353783927;

【问题讨论】:

  • 此查询是否返回 2 行 select * from application_price WHERE application_price.application_id = 353783927;?如果是,那就是答案。

标签: mysql select inner-join


【解决方案1】:

我认为您在application_price 表中有两条记录,其中euroapps.id = 353783927。

你能验证吗?

【讨论】:

  • 啊,真是个笨蛋,我太专注于在 euroapps 中寻找重复项,以至于忘记了其他表中的重复项,谈论只见树木不见木材,非常感谢!
【解决方案2】:

您的 application_price 表似乎有两行匹配。

尝试 select from application_price ,其中外键出现两次,您会找到罪魁祸首。

【讨论】:

    【解决方案3】:

    我的猜测是 application_price 表包含两行 application_id “353783927”。 “select * from application_price where application_price.application_id = 353783927”返回什么。我的猜测是您有一个架构,其中 application_price 指定了 euroapp 的差异价格。

    您似乎没有使用 application_price 的值,因此我不确定您为什么要加入它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多