2

この2つのバージョンの結果が同等であるかどうか、パフォーマンス上の理由からどちらが優れているか、またその理由を知りたいのですが。SelectバージョンのネストされたSelect

select 
 t1.c1, 
 t1.c2, 
 (select Count(t2.c1) from t2 where t2.id = t1.id) as count_t 
from 
 t1 

VS

select t1.c1,t1.c2, Count(t2.c1)
from t1,t2
where t2.id= t1.id
4

3 に答える 3

4

最初のクエリはこのクエリの類似物です-

SELECT
  t1.c1,
  t1.c2,
  COUNT(t2.c1)
FROM t1
  LEFT JOIN t2
    ON t2.id = t1.id;

最初のテーブルからすべてのレコードを選択し、2番目のテーブルから一致するすべてのレコードを選択します(これはLEFT JOIN条件です)。

2番目はこのクエリのアナログです-

SELECT
  t1.c1,
  t1.c2,
  COUNT(t2.c1)
FROM t1
  JOIN t2
    ON t2.id = t1.id;

両方のテーブルで一致するレコードのみを選択します(これはINNER JOIN条件です)。

于 2013-02-25T08:57:37.570 に答える
2

まあ、それらは異なるクエリです。テーブルt2に一致するIDがない場合、一番上の行はt1からすべての行を選択し、カウントに0を返します。

2番目のクエリは、t1とt2の両方に同じIDの行がある行のみを返します。

于 2013-02-25T08:56:59.973 に答える
0

最初のクエリは、大規模なデータ セットでパフォーマンスの問題が発生する可能性があります。2 番目のクエリには、デカルトの問題が発生する可能性があります。テーブル 2 に関連するレコードがない場合は、テーブル 1 からレコードを取得するという意図に基づいて、結合または左結合を使用し、デカルトを制御するために group by ステートメントを追加します。

于 2013-02-25T09:04:04.183 に答える