2016-11-24 240 views
1

我的問題是我需要在任何時候從dest表獲取mel列上的重複條目。如何在Laravel中使用子查詢正確查詢查詢

我試過這麼多的事情在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 

如選擇ID從dest d(從stt = 0組中選擇mel from mel有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服務器版本在 線1

使用近「dest.id」正確的語法手冊所以我不知道該怎麼塊包含在Laravel一個子查詢,

謝謝你幫

+0

我應該精確說明dest是一個有800萬行的大表格 –

回答

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 
+0

謝謝您的回覆! 我試圖在實現你的想法之前直接從MySQL執行,但它相當長且持久..我猜是因爲它是一張大桌子(大約8米行) –