奇怪的MySQL视图问题

时间:2013-10-25 13:48:10

标签: mysql

我有一个像这样定义的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条记录。

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

1 个答案:

答案 0 :(得分:1)

考虑一下步骤。

REAL QUERY

  1. 你加入
  2. 按地点(日期)
  3. 过滤结果
  4. 您分组
  5. 这给你一个结果集。

    在视图中

    1. 你加入
    2. U group by
    3. 这是视图/结果设置你的工作
    4. U过滤结果集。
    5. 您使用的两个完全不同的结果集,显然会产生两种不同的结果。