0

查询被减少到仍然产生错误的最少部分。只是为了解释的目的。

SELECT
        s.Saison,
        t.Saison,
        IF(s.Saison = t.Saison,'gleich','unterschiedlich')
FROM tbl_spielplan s
LEFT JOIN
          (SELECT
                        Kino_Id,
                        Saison,
                        (SUM(Besucher_Zahlend+Besucher_Frei)/COUNT(*)) AS Summe_T
                FROM
                        tbl_spielplan
                WHERE
                        Film_gezeigt='1'
                GROUP BY
                        Kino_Id,
                        Saison) AS t
ON s.Kino_Id = t.Kino_Id
WHERE
        Film_Id   = '3109'
AND     s.Kino_Id < 300
AND     s.Saison = t.Saison; 

没有找到匹配项。如果我省略 s.Saison = t.Saison 我得到

赛松 t.Saison if 子句匹配
2019智慧 2019智慧 格莱希
2019智慧 2019 SoSe 非席德利希
2019智慧 2018智慧 非席德利希

如果我仅在 s.Saison = t.Saison 上匹配,则连接有效,但如果我在 where 子句中添加 s.Kino_Id = t.Kino_Id,它将失败。现在对于非常奇怪的部分,如果我添加 AND BINARY s.Saison = t.Saison; 在 on 或 where 子句中问题停止了。也不是所有的数据集都会产生这个错误。我在 mariadb 10.3 和 10.5 的多个实例中对其进行了测试。这种行为是新的,半年前查询每次都有效。在 Mariadb 10.1 中,查询正常工作。

我已经找到了一种解决方法,我更感兴趣的是为什么,在我的理解中,这不应该发生。

4

1 回答 1

0

您以错误的方式使用左外连接。尝试这个

SELECT
        s.Saison,
        t.Saison,
        IF(s.Saison = t.Saison,'gleich','unterschiedlich')
FROM tbl_spielplan s
LEFT JOIN
          (SELECT
                        Kino_Id,
                        Saison,
                        (SUM(Besucher_Zahlend+Besucher_Frei)/COUNT(*)) AS Summe_T
                FROM
                        tbl_spielplan
                WHERE
                        Film_gezeigt='1'
                GROUP BY
                        Kino_Id,
                        Saison) AS t
ON s.Kino_Id = t.Kino_Id and s.Saison = t.Saison
WHERE
        Film_Id   = '3109'
AND     s.Kino_Id < 300 ;

带有外连接的表不应该在 where 条件下使用。

于 2021-06-28T09:17:34.647 回答