6

誰かがこれで私に手を貸してくれるのだろうか...

1 つのテーブルにはデフォルト データが含まれ、2 つ目のテーブルには上書きデータが含まれる 2 つのテーブルをクエリする必要があります。

表1

id = 5  
title = 'This is the default title'  
text = 'Hi, default text here...'  

表 2

id = 1  
relation_id = 5
title = 'This is an override title'  
text = NULL

行の完全なセットを返す必要があるため、table2 テキストが空の場合、結果セットには table1 テキストが含まれます。同様に、table2 のタイトルが空でない場合、結果のタイトルは table2 のタイトルの値になり、デフォルトの table1 のテキスト値が上書きされます。

完璧な結果セット

上記のテーブル構造から

id = 5
title = 'This is an override title'
text = 'Hi, default text here...'

標準結合を使用して両方のテーブルからすべてのデータを取得し、PHP でデータを配置しようとしましたが、可能であれば SQL で実行したいと思います。

私が実行しているクエリの大まかな例は...

SELECT vt.id, 
  vt.title as vt_title,
  vt.text AS vt_text,
  vt.relation_id,
  t.id, t.title,
  t.text 
  FROM table1 vt 
  LEFT JOIN table2 t ON vt.relation_id = $id 
  AND vt.relation_id = t.id",

私のテーブルには、同じ列名/オーバーライドデータを持つ最大 6 つの列が含まれる可能性があります。可能な限りデフォルトのフィールド名をそのままにして、戻りセットに新しい名前を割り当てないようにしたいと思います。たとえば、

悪い結果セット

id = 1
title = 'default title'
override_title = 'this is the override title'
text = 'Hi, default text here...'
4

1 に答える 1

5
SELECT  a.ID,
        COALESCE(b.Title, a.Title) Title,
        COALESCE(b.Text, a.Text) Text
FROM    Table1 a
        LEFT JOIN Table2 b
            ON a.ID = b.relation_ID

出力

╔════╦═══════════════════════════╦═══════════════════════╗
║ ID ║           TITLE           ║         TEXT          ║
╠════╬═══════════════════════════╬═══════════════════════╣
║  5 ║ This is an override title ║ Hi. default text here ║
╚════╩═══════════════════════════╩═══════════════════════╝
于 2013-04-15T12:14:18.673 に答える