2011-07-11 5 views
1

2つのテーブルがあるとします。同じIDを持つ行を、照会するには、あなたはこれをしなければならない。 同一の実テーブルでホストされている2つの擬似テーブルのクエリ

SELECT * FROM Table1 A, Table2 B WHERE A.id = B.id 

今すぐテーブルが追加元テーブルのカラムと、一つのグローバルテーブルにマージすることができます。だから、クエリ

SELECT * FROM Table1 

は今のようになります。

SELECT * FROM GlobalTable WHERE tableId = 1 

しかし、どのように最初のクエリは、今見てする必要がありますか?

SELECT * FROM Table1 A, Table2 B WHERE A.id = B.id 

+0

暗黙の結合は使用しないでください。プログラミングの習慣が貧弱なため、クエリに微妙なバグが生じることがよくあります。彼らは正当な理由でほぼ20年前に置き換えられました。 – HLGEM

答えて

2

1つのテーブルに1つのエンティティを格納する必要があります。 「真のルックアップテーブル」や「グローバルテーブル」といったものはありません。 EAVを考慮する必要はありません。この質問は、すべてのテーブルが同じレイアウトを持っていると仮定し、それが適切にそれほど動作しない場合...

は、しかし、私は後でより担当者を楽しみにして...

あなたが明示的に使用すべきフィルタを分離するために参加し、あなたはOUTER JOINの操作を行う必要がある場合の条件

Select * 
from 
    GlobalTable A 
    JOIN 
    GlobalTable B ON A.id = B.id 
WHERE 
    A.tableId = 1 AND B.tableId = 2 

に参加し、その後、あなたはこの私が持続するものの、インデックス付きビューを使用することをお勧めしたい

Select * 
from 
    (SELECT * FROM GlobalTable WHERE tableId = 1) A 
    LEFT JOIN 
    (SELECT * FROM GlobalTable WHERE tableId = 2) B ON A.id = B.id 

「にtableAを書くことができます"および" tableB "を別個のオブジェクトとして使用して、この連続的なフィルタリングを回避します。またはそれらをマージしないでください...

+0

あなたはいくつかの手がかりを与えてください、なぜ以下の答えがうまくいかず、JOINはすべきですか? – noober

+0

@noober:同じ動作ですが、JOINが優れています。 http://stackoverflow.com/questions/5654278/sql-join-is-there-a-difference-between-using-on-or-where/5654338#5654338 – gbn

+0

Ohhh ...参照してください。ありがとう。 – noober

関連する問題