使用Select MySQL重复输入 - 非常奇怪

时间:2016-12-16 10:13:39

标签: php mysql mariadb

使用Select MySQL我有一个非常奇怪的问题。

  • MySQL Prod Server我有这样的错误:#1062 - Duplicata du champ'10250'pour la clef'key0'(=#1062 - 密钥'key0'的重复字段'10250') 。 MariaDB 10.0.28
  • MySQL Dev Server,我没有错误 MySQL 5.5
  • 这是Prod and Dev(Import Prod> Dev)
  • 中的相同数据库

这是查询。但是,我已经简化了很多次。这对你来说似乎很愚蠢,我简化它只是为了保留错误:

SELECT
    (
        SELECT
            IF(
                (
                    SELECT
                        SUBSTRING(ed2.numero2, 1, 1)
                    FROM
                        ecriture_detail ed2
                    WHERE
                        ed2.ecriture_id = ed1.ecriture_id
                    LIMIT
                        0, 1
                ) = 6,
                SUM(1),
                SUM(1)
            )
        FROM
            ecriture_detail ed1
            INNER JOIN
                compte s_c ON s_c.id = ed1.compte_id
            INNER JOIN
                association_detail s_ad ON s_ad.ecriture_detail_id = ed1.id
        WHERE
            ed1.compte_id = c.id
            AND ed1.ecriture_id = e.id
    ) AS amount,
    c.id AS c_order
FROM
    compte c
    INNER JOIN ecriture_detail ed ON
        c.id = ed.compte_id AND
        ed.date_suppression IS NULL
    INNER JOIN ecriture e ON
        ed.ecriture_id = e.id
    LEFT JOIN association_detail ad ON
        ad.ecriture_detail_id = ed.id
    LEFT JOIN association a ON
        a.id = ad.association_id
WHERE
    c.activite_id IN("66", "67", "68", "69", "144") AND
    SUBSTRING(c.numero, 1, 1) = "4" AND
    (
        a.complet != 1 
        OR a.complet IS NULL
    ) AND
    SUBSTRING(c.numero, 13, 6) != "000000"
HAVING
    amount != 0
ORDER BY
    c_order ASC
  • 如果我删除“ORDER BY c_order ASC”,正在运行
  • 如果我删除“HAVING amount!= 0”,正在运行
  • 如果我在WHERE中删除“(a.complet!= 1或a.complet IS NULL)”,它正在运行
  • 如果我在子查询中删除“INNER JOIN association_detail s_ad”,它正在运行
  • 但是4在一起它不起作用。但是我没有看到所有
  • 之间的任何联系

你能帮助我吗?

1 个答案:

答案 0 :(得分:0)

虽然这个问题记录为一个错误(https://bugs.mysql.com/bug.php?id=58081),但在日志中有一个有趣的注意事项:

  

[2015年7月16日2:43] Yoseph Phillips

     

我已经看到使用MySQL 5.6.25发生了同样的错误。我在这里工作   原因是GROUP BY中使用的列的损坏索引   子句(使用该索引进行简单选择不会返回   行,使用其他索引将返回行)。

因此,可能会检查是否涉及某些索引,如果是,您可以尝试重新索引它们。