如何在Laravel中使用子查询正确地查询查询

时间:2016-11-24 16:00:17

标签: mysql laravel-5 subquery

我的问题是我需要随时从dest表中获取mel列上的重复条目。

我已经尝试了很多东西来翻译Laravel中的这个查询,但找不到方法:

select id
from dest d,
     (select mel from dest where stt = 0 group by mel having count(mel) > 1) sr
where d.mel = sr.mel

我试图创建一个视图

create DEFINER = user view dest_doubles

作为来自dest d的select id,(从dest中选择mel,其中stt = 0 group by mel have count(mel)> 1)sr,其中d.mel = sr.mel

select id from dest_doubles查询会一直持续,而

select id from dest d, (select mel from dest where stt = 0 group by
mel having count(mel) > 1) sr where d.mel = sr.mel

在3分钟内回复

我在Laravel命令中试过这个:

\DB::select(\DB::raw('dest.id'))
                        ->from(\DB::raw('dest, (select mel from dest where stt = 0 group by mel having count(mel) > 1) as sr'))
                        ->whereRaw('dest.mel = sr.mel')
                        ->chunk(10000, function ($doubles) {

});

无法执行:

  

[PDOException]
  SQLSTATE [42000]:语法错误或访问冲突:1064您有   SQL语法错误;查看与您的手册相对应的手册   MySQL服务器版本,在'dest.id'附近使用正确的语法   第1行

所以我不知道如何在Laravel

中包含一个包含子查询的查询

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

我不是Laravel大师,但您可以在表和子查询之间将原始查询重写为INNER JOIN。使用Laravel可能会更容易。

SELECT id
FROM dest d
INNER JOIN
(
    SELECT mel
    FROM dest
    WHERE stt = 0
    GROUP BY mel
    HAVING COUNT(*) > 1
) AS sr
    ON d.mel = sr.mel