Полное внешнее соединение в MySQL с несколькими условиями - PullRequest
0 голосов
/ 12 мая 2018

У меня есть две таблицы

table1

id  userid date_t  game  hdigit inside
1   yui    0909    alpha 8      700
2   loi    0809    beta  7      600

table2

id  userid date_t  game  hdigit outside
1   yui    0909    alpha 8       600
2   ron    0809    gama  5      600

I want result like this

id  userid date_t  game  hdigit inside  outside
1   yui    0909    alpha 8      700      600
2   loi    0809    beta  7      600       null
3   ron    0809    gama  5      null      600

Я пробовал простое соединение

select table1.userid 
     , table1.date_t 
     , table1.game
     , table1.inside 
     , table2.outside 
  from table1 
     , table2 
 where table1.hdigit = table2.hdigit 
   AND table1.date_t = table2.date_t 
   AND table2.game = table1.game 
   AND table1.userid = table2.userid

Очевидно, что это дает мне простое объединение общих ценностей, но как добиться выше всего, любая помощь будет очень признательна.

1 Ответ

0 голосов
/ 12 мая 2018

Для ваших целей, я думаю, group by / union all - лучший подход:

select (@rn := @rn + 1) as id, userid, date_t, game, hdigit,
       max(inside) as inside, max(outside) as outside
from ((select userid, date_t, game, hdigit, inside, null as outside
       from table1
      ) union all
      (select userid, date_t, game, hdigit, null, outside
       from table2
      )
     ) t cross join
     (select @rn := 0) params
group by userid, date_t, game, hdigit;

Причина, по которой вы не хотите full join, заключается в том, что вы хотите получить одну строку длякомбинация из четырех клавиш.Когда вы хотите одну строку, group by часто является жизнеспособным решением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...