gpt4 book ai didi

mysql - MySql 中的 LIMIT 子句似乎不适用于 IN() 子查询

转载 作者:行者123 更新时间:2023-11-29 05:32:56 25 4
gpt4 key购买 nike

假设,我有一个如下所示的 SQL 语句。

SELECT country_id, country_name 
FROM country
WHERE country_id
IN(SELECT country_id FROM state
WHERE LENGTH(state_name)>=5
ORDER BY LENGTH(state_name) DESC);

它使用指定的子查询从 country 表中获取所有在 state 表中对应的州名超过 5 个或更多字符的国家。

我只想检索那些在 state 表中相应的前 5 个州 在按降序排序后长度为 5 个或更多字符的国家。

在这种情况下,带有子查询的 LIMIT 子句似乎不起作用,下面的查询也无法工作。

SELECT country_id, country_name 
FROM country
WHERE country_id
IN(SELECT country_id FROM state
WHERE LENGTH(state_name)>=5
ORDER BY LENGTH(state_name) DESC
LIMIT 5);

与子查询一起使用的 LIMIT 子句导致如下指定的错误。

This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

我使用的是 MySql 版本 5.1.48

有办法解决这种情况吗?

最佳答案

您需要将 IN() 子句替换为针对同一子查询的 INNER JOIN。正如错误消息所说,LIMITIN() 子查询中根本不受支持。

SELECT 
country.country_id,
country.country_name
FROM
country
/* JOIN the main `country` table against a subquery that retrieves the limited country_id set */
INNER JOIN (
SELECT country_id
FROM state
WHERE LENGTH(state_name)>=5
ORDER BY LENGTH(state_name) DESC
LIMIT 5
) subq ON country.country_id = subq.country_id

Here is a demonstration

(是的,我知道加拿大人不称他们为“州”,当然 GBR 也不称他们为“州”)

关于mysql - MySql 中的 LIMIT 子句似乎不适用于 IN() 子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13237891/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com