【问题标题】:mysql left join doesnt returns rows from joined tablemysql左连接不返回连接表中的行
【发布时间】:2013-02-18 20:56:56
【问题描述】:

我有 2 个相同的表(_impressionsdaily,_impressionsalltime),在每天结束时,我将所有数据从每天移动到所有时间。 结构为:ID、purchaseID、impression、unique、date。

我运行以下查询:

SELECT  
    daily.purchaseID,
    SUM(daily.impression + IFNULL(alltime.impression, 0)) AS impression,
    SUM(daily.unique + IFNULL(alltime.unique, 0)) AS `unique`
    FROM _impressionsdaily daily
    LEFT JOIN _impressionsalltime alltime ON alltime.purchaseID= daily.purchaseID
    GROUP BY daily.purchaseID;

问题是,如果所有时间表中的商品在日常中不可用,我将不会看到它们。

基本上,这个想法是汇总每日和所有时间的所有展示次数。

---编辑 事情是在每天凌晨 12:00,每日表被复制到所有时间,然后被删除。 所以给出的解决方案是错误的..

感谢您的帮助, 丹尼

【问题讨论】:

  • daily 表中的记录是否不断复制到 alltime 表中?或基于时间,所以所有时间与每日不同步?如果它们不同步,则需要进行某种外连接,因为内/左/右连接只会找到存在于任一表或两个表中的记录。
  • 我对联合很熟悉...只是需要@SeamWM 的思维方式

标签: php mysql yii


【解决方案1】:

我认为您正在寻找Union Select。试试这样的:

SELECT DISTINCT(p.ID), p.purchaseID
FROM (SELECT *
      FROM _impressionsdaily
      UNION SELECT *
      FROM _impressionsalltime) AS p
GROUP BY p.purchaseID

【讨论】:

  • add SUM*...我在之前的回复中遗漏了这个:)
【解决方案2】:
SELECT  
daily.purchaseID,
SUM(daily.impression + IFNULL(alltime.impression, 0)) AS impression,
SUM(daily.unique + IFNULL(alltime.unique, 0)) AS `unique`
FROM _impressionsdaily daily
LEFT JOIN _impressionsalltime alltime ON alltime.purchaseID= daily.purchaseID
GROUP BY daily.purchaseID;

在这种情况下,您没有选择 _impressionsalltime 表中的任何字段。

您也可以使用此 sql 从 _impressionsalltime 表中选择字段

SELECT  
alltime.*,
daily.purchaseID,
SUM(daily.impression + IFNULL(alltime.impression, 0)) AS impression,
SUM(daily.unique + IFNULL(alltime.unique, 0)) AS `unique`
FROM _impressionsdaily daily
LEFT JOIN _impressionsalltime alltime ON alltime.purchaseID= daily.purchaseID
GROUP BY daily.purchaseID;

【讨论】:

  • 这是不对的,因为这个查询的结果只会返回结果的左边为 NULLS...
猜你喜欢
  • 2011-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-16
  • 1970-01-01
  • 1970-01-01
  • 2011-06-10
  • 2012-10-31
相关资源
最近更新 更多