32

我有一个包含以下列的表 TEST :

code_ver (VARCHAR)
suite (VARCHAR)
date (DATE)

现在我想选择不同值为 c 的 10 行ode_ver & code_ver NOT LIKE '%DevBld%' sorted by date desc.

所以我写了以下查询:

select * 
  from test 
 where code_ver IN (select DISTINCT code_ver 
                      from test 
                     where code_ver NOT LIKE '%DevBld%' 
                     ORDER by date DESC LIMIT 10);

理想情况下,这个查询应该可以工作,但我的 MySQL 版本说:

这个版本的 MySQL 还不支持 'LIMIT & IN/ALL/ANY/SOME 子查询'

有人可以建议我替代此查询吗?

4

4 回答 4

63

Layke 提出的答案在我的范围内是错误的。在子查询中使用限制的意图是使主查询在从子查询中获取的有限记录上运行。如果我们将限制保持在外部,那么限制对子查询毫无用处。

由于 mysql 尚不支持子查询限制,因此您可以使用 JOIN,如下所示:

       
    SELECT * FROM test
    JOIN 
    (
        SELECT DISTINCT code_ver 
        FROM test 
        WHERE code_ver NOT LIKE '%DevBld%' 
        ORDER BY date DESC LIMIT 10
    ) d
    ON test.code_ver
    IN (d.code_ver)
    ORDER BY xyz;
于 2016-04-20T11:28:39.987 回答
23

您也可以使用相同的查询,只需在子查询之前添加一层额外的选择。就是这样。它会起作用的。

select * from test 
where code_ver IN (select * from (select DISTINCT code_ver 
                      from test 
                     where code_ver NOT LIKE '%DevBld%' 
                     ORDER by date DESC LIMIT 10) as t1);
于 2018-08-16T12:58:12.177 回答
8

将子查询放在派生表中:

   SELECT test.*
     FROM test
LEFT JOIN (SELECT DISTINCT code_ver
             FROM mastertest
            WHERE code_ver NOT LIKE '%DevBld%'
            ORDER BY `date` DESC
            LIMIT 10) d
    USING (code_ver)
    WHERE d.code_ver IS NOT NULL;

(当然,您也可以 RIGHT JOIN 并删除外部 WHERE 条件。)

于 2012-10-10T00:38:56.113 回答
-14

您得到的错误不完全是因为 MySQL 的版本。我认为所有版本都支持这一点。您必须更改 LIMIT 10 位置并将其放在“)”之后。请让我知道这对你有没有用。我在我的身上运行了波纹管,它可以工作。

例如

SELECT * FROM test where name IN (
           SELECT DISTINCT name 
           FROM projects 
           WHERE name NOT LIKE "%DevBld%"  
           ORDER by date_created DESC
 ) LIMIT 10;

更新:试试下面的一个,这样顺序就可以了:

 SELECT * FROM  automation.e2e_projects WHERE name IN (
       SELECT DISTINCT name 
       FROM automation.e2e_projects
       WHERE name NOT LIKE "%DevBld%"
 ) ORDER by date_created DESC LIMIT 10;
于 2012-10-10T04:14:25.560 回答