1

MySQL クエリでかなり単純な 1 対多型の結合があります。この場合、左の表で結果を制限したいと思います。

たとえば、1 つのaccountsテーブルと 1つのテーブルがあり、そこから 100 行を取得し、それぞれに関連するすべてのcomments行を取得したいとします。accountscomments

これを行う唯一の方法は、単に FROM を選択するのではなく、 FROM 句で副選択を使用することaccountsです。これが私の現在の考えです:

SELECT a.*, c.* FROM 
    (SELECT * FROM accounts LIMIT 100) a
    LEFT JOIN `comments` c on c.account_id = a.id
    ORDER BY a.id

しかし、ある種の副選択を行う必要があるときはいつでも、中級レベルの SQL の知識では何か間違ったことをしているように感じます。

これを行うためのより効率的または高速な方法はありますか、それともかなり良い方法ですか?

ところで...

これは、これを行う最も簡単な方法かもしれませんが、答えとしては問題ありません。私は、速度の点で上記のステートメントと潜在的に競合する可能性のあるこれを行う別の方法があるかどうかを理解しようとしています.

4

2 に答える 2

1

いいえ、クエリは問題ありません。そのままです。a.*andの代わりにフィールドをフィルター処理することc.*もできます。

于 2012-04-08T17:20:54.640 に答える
1

私には完璧に見えます。

上記のクエリから 100 行未満または 100 行を超えても問題ないかどうか疑問に思っています。テーブルの特定の行に対してaccountsテーブルに行がないcomments場合、100行未満になるためです。同様に、commentsテーブル内の行に対してテーブル内に複数の一致する行accountsがある場合、100 行を超える可能性があります。

参照:このクエリを最適化するにはどうすればよいですか。実行に 1 分以上かかります

于 2012-04-08T17:26:27.563 に答える