1

私は2つのmysqlテーブルを持っています

テーブル 1 は「qualitaet-inventar」であり、AUTO_INCREMENT として「sachnummer」を含む 3000 行があります


テーブル 2 は「qualitaet」で、いくつかの行があります。ここでは「id」が AUTO_INCREMENT に設定されています。重要なことは、「sachnummer」が何度も存在できることです。(写真の赤いマークを参照)


私がやりたいのは、「qualitaet」から「qualitaet-inventar」への左結合です

「qualitaet」で「作成」の最新の日付を表示して、すべての「sachnummer」をグループ化したい

「sachnummer」が「qualitaet」で利用できない場合は、「qualitaet-inventar」に空の結合を行います


だから私はこのコードを持っています

SELECT 
    i.`sachnummer` AS id,
    MAX(q.`created`) AS letztemessung,
    i.`sachnummer-name` AS sachnummer
FROM
        `qualitaet-inventar` i
LEFT JOIN
        `qualitaet` q on i.`sachnummer` = q.`sachnummer`
GROUP BY
        sachnummer
ORDER BY
    sachnummer ASC

問題は、この結果を得るのに長い時間がかかることです


このコードを使用すると、より高速に動作します

SELECT 
    q.`sachnummer` AS id,
    MAX(q.`created`) AS letztemessung,
    i.`sachnummer-name` AS sachnummer
FROM
    qualitaet q
LEFT JOIN
    `qualitaet-inventar` i on q.`sachnummer` = i.`sachnummer`
GROUP BY
    sachnummer
ORDER BY
    sachnummer ASC

しかし、私はこのコードで穴の在庫と空の日付を取得しません


高いテーブル行でこのテーブルをより高速に取得することは可能ですか? :D

編集:

ここに私のインデックスがあります

4

2 に答える 2

0

これは一般的な考え方で、短いテーブル名を使用しています。

select somefields
from table1 t1 left join table2 t2 on t1.something = t2.something
join (
select something, max(datetimefield) maxdt
from table1
where whatever
group by something
)  t3 on t1.something = t3.something
and t1.datetimefield = maxdt
where whatever
于 2013-04-21T18:46:27.060 に答える