2011-12-09 1 views
0

Table_Aテーブルの関係でこのクエリを実行する正しい方法はありますか?

  • TA_ID
  • TA_Column
  • TA_Column
  • [...]

Table_B

  • TB_ID
  • TB _TableA_ID
  • TA_Column
  • [...]

Table_C

  • TC_ID
  • TC_TableA_ID
  • TC_TableB_ID
  • TA_Column
  • [...]

SELECT TC_TableA_ID = 1

Table_C * FROM(はい、私は知っている "SELECT *" が悪いです。ちょうどこの例のためにそれを使用。)

= = = = = = = = = = OR = = = =

Table_A

  • TA_ID
  • TA_Column
  • [... ]

Table_B

  • TB_ID
  • TB_TableA_ID
  • TA_Column
  • [...]

Table_C

  • TC_ID
  • TC_TableB_ID
  • TA_Column
  • [ ...]

SELECT * FROM Table_C c LEFT JOIN Table_B b ON c.TC_TableB_ID = b。TB_ID WHERE TB_TableA_ID = 1

私は自分のプロジェクト/コード全体で両方を使用していましたが、実際にはそれに固執していませんでした。どちらが最も効率的なスキーマ/クエリフォームですか?

答えて

0

あなたの2番目の選択肢:ジョインに私をマークしてください。表Cは、直接関連する列を参照する必要があります。例えば、場合:DEPARTMENT

  • 表A部門の変更の際に位置をどうなりLOCATION
  • ある

    • 表Cは、
    • 表B EMPLOYEEですか? Departmentテーブルを更新して、新しいLocationレコードを参照します。しかし、その後、すべての社員の記録を更新して更新する必要がありますか? 2つの異なるパスを使用して2つの異なる結果を得る完全性の問題を導入するのは簡単です。 (従業員はどこに位置していますか?パス1:直接場所に移動し、パス2:部署に移動してから場所)。これは本当の痛みです。

      インデックスが正しく割り当てられていれば、パフォーマンスは問題ではありません。

    関連する問題