0

私は持っています、$member_idこのメンバーの詳細が複数の行でそれらのテーブルに保存されている5つのテーブルがあります。

これらのテーブルからこのユーザーデータを取得するために、次を使用できJOINますUNION

//Using JOIN:
SELECT * FROM table1 LEFT JOIN table2 ON table1.id=table2.id LEFT JOIN table3 ON table2.id=table3.id AND table1.member_id = '$member_id'

//USING UNION
(SELECT a FROM t1 WHERE member_id = '$member_id')
UNION
(SELECT a FROM t2 WHERE member_id = '$member_id')
ORDER BY a LIMIT 10;

どちらが好ましいですか?どちらがより良いパフォーマンスを持っていますか?外部キーに関連する多くのテーブルから情報を取得したい場合の本当の方法は何ですか?

4

2 に答える 2

0

同じ行にすべての列が必要な場合は、joinを使用する必要があります。行ごとの場合は、unionを使用する必要があります。これが基準です。彼らは秘密ではありません。

この列がすべてのテーブルに表示されない場合は、左結合を使用することを忘れないでください。

SELECT table0.id as a0, table1.id as a1, table2.id as a2, ...
FROM 
   (select '$member_id' as id from dual ) table0
LEFT outer join table1 ON table1.id=table0.id
Left outer JOIN table2 ON table1.id=table2.id 
LEFT outer JOIN table3 ON table2.id=table3.id 

また、ユニオンでは、各行にタグを付けることができます。

//USING UNION
(SELECT 't1' as t, a FROM t1 WHERE member_id = '$member_id')
UNION ALL
(SELECT 't2' as t, a FROM t2 WHERE member_id = '$member_id')
ORDER BY a LIMIT 10;
于 2012-11-19T08:57:27.047 に答える
0

同じ構造で重複行を削除したい場合は、UNIONを使用できます。それ以外の場合は、JOINステートメントを使用することをお勧めします。

于 2012-11-19T08:57:38.220 に答える