簡體   English   中英

將復雜的SQL轉換為JOIN

[英]Converting complex SQL to JOIN

我有以下SQL語句。 哪個工作正常。 除非在某些情況下,查詢的處理需要大量時間,否則會導致系統超時。 因此,我需要轉換該語句。 可能與JOIN。

我不知道如何轉換此語句:

SELECT table1.id as id, 
       table1.firstname, 
       table1.lastname, 
       table3.name, 
       table4.name 

FROM table1, table2, table3, table4, table5 

WHERE table1.id = table2.tabel1id 
AND table2.table2id = table3.table2id 
AND table3.table3id = table5.table3id
AND table5.somecode = '5' 
AND table3.table3id = table4.name 
AND table1.firstname LIKE '%John%' 

GROUP BY table1.id 
ORDER BY table3.name, table1.firstname, table1.lastname

我有表的嵌套,我也想在最終的SELECT(table3.name和table4.name)中使用子查詢的結果

您已經有JOIN,但是使用隱式版本(WROME中的逗號分隔表列表加上WHERE中的聯接條件)而不是顯式版本(JOIN加ON)。

因此,重寫不應提高性能(否則MySQL比我想象的要糟糕得多)。

您最好檢查是否創建了所有必要的索引。

SELECT table1.id as id, 
       table1.firstname, 
       table1.lastname, 
       table3.name, 
       table4.name 

FROM table1 INNER JOIN table2
ON table1.id = table2.tabel1id 
INNER JOIN  table3 
ON table2.table2id = table3.table2id
INNER JOIN  table4
ON table3.table3id = table4.name 
INNER JOIN table5 
ON table3.table3id = table5.table3id
WHERE 
     table5.somecode = '5' 
AND table1.firstname LIKE '%John%' 

GROUP BY table1.id as id, 
       table1.firstname, 
       table1.lastname, 
       table3.name, 
       table4.name 
ORDER BY table3.name, table1.firstname, table1.lastname

在這里閱讀有關sql server JOIN語法的更多信息

select t1.id,t1.firstname,t3.name,t4.name 
from table1 as t1 
inner join table2 as t2 on t1.id=t2.tabel1id 
inner join on table3 as t3 on t2.table2id=t3.table2id
inner join on table4 as t4 on t3.table3id=t4.name
inner join on table5 as t5 on t5.table3id=table3.table3id 
where t1.firstname like '%John%' and t5.somecode='5'
group by t1.id
order by t3.name,t1.firstname,t1.lastname

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM