0

次の mysql クエリでは、テーブル aitisi から行を取得して、テーブル メンバーの空白値の代わりに表示できるかどうかを知りたいです。つまり、ユニオンを作成するだけでなく、最初のテーブルのデータをすべての行に表示する必要があります。

select a1.id, a1.name, a1.surname, a1.program, a1.date
from aitisi a1 
union select a.id, m.name, m.surname, null, null from members m 
join aitisi a on (a.id = m.symbid)

null をダミー フィールドとして使用して、同じ数の列でユニオンを実行できるようにしました。しかし、この方法では、テーブル aitisi の行でのみ日付とプログラムを取得しており、残りは空白です。

4

1 に答える 1

0

これを試してください(あまり効率的ではありません):

SELECT u.id, u.name, u.surname,
       coalesce(u.program, aa.program),
       coalesce(u.date, aa.date)
  FROM (SELECT a1.id, a1.name, a1.surname,
               a1.program, a1.date
          FROM aitisi a1 
         UNION
        SELECT a2.id, m.name, m.surname, NULL, NULL
          FROM members m
          JOIN aitisi a2 ON a2.id = m.symbid) u
  JOIN aitisi aa ON aa.id = u.id;

最初のクエリを詳しく見てみると、このバリアントの何が問題になるでしょうか。

SELECT a1.id, a1.name, a1.surname, a1.program, a1.date
  FROM aitisi a1 
 UNION
SELECT a2.id, m.name, m.surname, a2.program, a2.date
  FROM members m 
  JOIN aitisi a2 ON a2.id = m.symbid;
于 2012-06-20T20:08:19.557 に答える