2

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を使用する必要があることがわかりました。コードを修正する方法を知っていますか?前もって感謝します。:)

4

1 に答える 1

2

このサブクエリが複数の行を返していると思われます。

(
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'
于 2012-07-25T09:24:22.780 に答える