1

我有一个这样定义的 MySQL 视图:

SELECT
    group_concat(`h`.`name` SEPARATOR ',') AS `hosts`,
    `m`.`id` AS `slo_application_id`,
    `s`.`application` AS `application`,
    `s`.`slo_conformance` AS `slo_conformance`,
    `s`.`hourly_conformance` AS `hourly_conformance`,
    `s`.`date` AS `date`,
    `m`.`slo_profile` AS `slo_profile`
FROM
    (
        (
            `inv_host_slo` `s`
            JOIN `slo_host_map` `m` ON (
                (
                    `s`.`application` = `m`.`application_string`
                )
            )
        )
        LEFT JOIN `inv_host` `h` ON ((`m`.`host_id` = `h`.`id`))
    )
GROUP BY
    `s`.`application`

date这很简单,但是当我在字段上使用 WHERE 查询视图时,我注意到了一些奇怪的行为。如果我在实际 SQL 查询中WHERE s.date = '2013-10-22'的语句之前插入,GROUP BY我会得到 2425 条记录,但如果我直接对视图执行此操作:

SELECT
    *
FROM
    v_host_slo_conformance
WHERE
    date = '2013-10-22'

我只得到 307 条记录。

这在我的开发数据库上没有发生,唯一的区别是开发运行的是 5.5.15,而生产运行的是 5.5.14。这是基于版本差异的错误还是我忽略的错误?

4

1 回答 1

1

想想步骤。

真实查询

  1. 你加入
  2. 按位置(日期)过滤结果集
  3. 你组

这为您提供了一个结果集。

可见

  1. 你加入
  2. U 分组
  3. 这是您工作的视图/结果
  4. U 过滤结果集。

您处理的两个完全不同的结果集显然会给出两个不同的结果。

于 2013-10-25T13:54:46.753 回答