2

たとえば、2つのテーブルがあります

表1

ID  |  Prop1  |  Prop2  |  Prop3
--------------------------------
 1  |    a    |   b     |   c
 2  |    d    |   e     |   f

表2

Name  |  ID  |  Prop1  |  Prop2
-------------------------------
 i    |   1  |   aa    |  null

私がしたいのは、Table2.Name = 'i' の ID に対応する Table1 の行を返す (変更しない) ことですが、Table2 の値は null ではありません (存在する場合)。結果は次のようになります。

ID  |  Prop1  |  Prop2  |  Prop3
--------------------------------
 1  |    aa   |   b     |   c
4

1 に答える 1

1

IFNULL(x, y)の値を置き換えるために使用できますNULL

SELECT
    t1.ID
   ,IFNULL(t2.Prop1, t1.Prop1) AS Prop1
   ,IFNULL(t2.Prop2, t1.Prop2) AS Prop2
   ,IFNULL(t2.Prop3, t1.Prop3) AS Prop3
FROM
    Table1 t1
LEFT JOIN
    Table2 t2
    ON
    t1.ID = t2.ID

IFNULL()引数は 2 つしか受け付けないことに注意してください。ある時点でさらにテーブルを追加する可能性があると思われる場合は、次のように切り替えCOALESCE()ます。

SELECT
    t1.ID
   ,COALESCE(t2.Prop1, t1.Prop1) AS Prop1
   ,COALESCE(t2.Prop2, t1.Prop2) AS Prop2
   ,COALESCE(t2.Prop3, t1.Prop3) AS Prop3
FROM
    Table1 t1
LEFT JOIN
    Table2 t2
    ON
    t1.ID = t2.ID
于 2013-02-05T21:05:25.927 に答える