1

必要なデータが 2 つのテーブルのうちの 1 つである 3 つのテーブルを結合する際に問題が発生していますが、両方ではありません。

たとえば、「id」、「city」、「state」列を持つ「customers」テーブルと、「id」列と必要なデータを持つ 2 つのデータ テーブル data_a と data_b があるとします。

今、私は以下のような声明を持っています。

SELECT cust.id, cust.city, cust.state, a.info as infoa, b.info as infob
  FROM customers cust
  INNER JOIN data_a a 
    ON cust.id = a.id
  INNER JOIN data_b b
    ON cust.id = b.id
  WHERE cust.city = 'mytown';

これは実行に永遠に時間がかかり、終了する前に終了するため(実際に終了する場合)、クエリからの応答はありません。

2 番目のデータ テーブルを削除すると、ステートメントは正常に機能しますが、追加した場合にのみ問題が発生します。すべての id 列にインデックスが付けられ、city 列も同様です。

それとも、一時テーブルを作成して2つの結合を行い、それらを一時テーブルに挿入して一時テーブルから読み取るほうがよいですか?

編集:タイプミスを修正

左結合を行うと、おそらく無期限にクエリが実行されます。内部結合を使用すると、空のセットが取得されます。

4

1 に答える 1

1

結合が両方ではなく1つのテーブルにある場合は、LEFTJOINが必要です。

SELECT cust.id, cust.city, cust.state, a.info as infoa, b.info as infob
  FROM customers cust
  LEFT JOIN data_a a 
    ON a.id = cust.id
  LEFT JOIN data_b b
    ON b.id = cust.id
  WHERE cust.city = 'mytown';

次のインデックスがあることを確認してください。

cust: ('city')
data_a: ('id')
data_b: ('id')
于 2012-05-23T18:36:00.623 に答える