MySQL 错误 1242,即使使用 ANY

标签 mysql subquery

我开始使用 OpenGeoDB 来查找邮政编码和城市名称。我的 MySQL 查询如下所示:

SELECT      `d`.`text_val` AS `city`, (
    SELECT  `text_val`
    FROM    `geodb_textdata`
    WHERE   `loc_id` = ANY (
        SELECT  `loc_id`
        FROM    `geodb_textdata`
        WHERE   `text_val` LIKE '08%'
    )
        AND `text_type` = '500300000'
) AS `plz`, `c`.`lat`, `c`.`lon`
FROM        `geodb_textdata`    AS  `d`
LEFT JOIN   `geodb_coordinates` AS  `c` USING   (`loc_id`)
WHERE       `loc_id` = ANY (
    SELECT  `loc_id`
    FROM    `geodb_textdata`
    WHERE   `text_val` LIKE '08%'
)
    AND `text_type` = '500100000'

如果我使用完整的邮政编码或城市名称运行此查询,效果很好,但使用上面的代码,我会收到错误代码

#1242 - Subquery returns more than 1 row

我正在使用 Google,我发现我应该在 = 和子查询之间使用 ANY。您知道如何修复我的代码吗?先感谢您。 :)

最佳答案

我怀疑此子查询返回的行数超过 1 行:

(
SELECT  `text_val`
FROM    `geodb_textdata`
WHERE   `loc_id` = ANY (
    SELECT  `loc_id`
    FROM    `geodb_textdata`
    WHERE   `text_val` LIKE '08%'
)
    AND `text_type` = '500300000'
) AS `plz`

更新:未经测试,但请尝试此查询。

SELECT      `d`.`text_val` AS `city`, `d2`.`text_val` AS `plz`, `c`.`lat`, `c`.`lon`
FROM        `geodb_textdata`    AS  `d`
LEFT JOIN  `geodb_textdata`    AS  `d2` USING (`loc_id`)
LEFT JOIN   `geodb_coordinates` AS  `c` USING   (`loc_id`)
WHERE       `d`.`text_val` LIKE '08%' AND `d`.`text_type` = '500100000'
AND         `d2`.`text_val` LIKE '08%' AND `d2`.`text_type` = '500300000'

关于MySQL 错误 1242,即使使用 ANY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11646522/

相关文章:

javascript - 通过 mysql npm 包更新时出错

mysql - 更高效的 MySQL 子查询?

mysql - 选择两个表并求和列值

mysql - 想要在子查询中使用 Between 子句

php - 链式选择 ajax 调用仅在值为数字时有效

php - PDO 'UPDATE' 带参数的语句不起作用

mysql - 无法针对 mysql 5.1.69 的 innoDB 创建名称为混合大小写 Service 的表

java - @Transient 在 JPA 中无法正常工作

mysql - 什么查询最快?

使用子查询的 MySql SELECT 无法按预期工作