0

私は今しばらく試してみました。UNIONと偽の(左1つと右1つの結合)完全結合を試しました。私はSQLがあまり得意ではないので、おそらく私は解決策に出くわしましたが、それを正しく行うことができませんでした。

この例では、3つのテーブルがあります(おそらく時間とともにさらに多くのテーブルがあります)。

post:
 ----------------------------
|  type  |  rel_id  |   id   |
 ----------------------------
|  video |     2    |    51  |
|----------------------------|
|  text  |     1    |    50  |
 ----------------------------

video:
 ----------------------------
|  id |  video_url |  title  |
 ----------------------------
|  2  |     ...    |    ...  |
|----------------------------|
|  1  |     ...    |    ...  |
 ----------------------------

text:
 ----------------
|  id |  contend |
 ----------------
|  2  |    ...   |
|----------------|
|  1  |    ...   |
 ----------------

ポストテーブルはメインテーブルです。タイプフィールドには、結合するテーブルが表示されます。フィールドrel_idは、接続する行を示します。

私はこのようないくつかの出力を使用することができます:

 ------------------------------------------
| id | type  | video_url | title | contend |
 ------------------------------------------
| 51 | video |    ...    |  ...  |   NULL  |
|------------------------------------------|
| 50 | text  |    NULL   |  NULL |   ...   |
 ------------------------------------------

最後の問題は、すべての結果を検索するために使用できるように、最後のWHERE句を空ける必要があることです。

4

1 に答える 1

0

あなたは試すことができます:

SELECT p.id AS id, p.type AS type, v.video_url AS video_url, 
       v.title AS title, NULL AS contend
FROM post p INNER JOIN video v 
  ON p.rel_id = v.id AND p.type = 'video'
UNION
SELECT p.id, p.type, NULL, NULL, t.contend
FROM post p INNER JOIN text t
  ON p.rel_id = t.id AND p.type = 'text'
于 2012-11-11T16:39:41.000 に答える