Многостолбцовое сопоставление MySQL с многорядными результатами

0

Я новичок в mySQL и пытался решить это в течение дня. Я попытался сопоставить данные из столбца Want1 с предложением1 и Want2 с предложением2, но Type также должен совпадать с другим uid. Каждый uid будет иметь только W или O в W/O (хотите/предлагать). Вот мой стол.

Таблица пользователей:

Id,  Want1, Want2, Offer1, Offer2, Type, uid, W/O
---  -----  -----  ------  ------  ----  ---  ---
1      a     null   null    null    KK    5    W
2    null      b    null    null    LL    30   W
3    null    null     a     null    KK    20   O
4    null    null   null      b     LL    13   O
5    null    null     a     null    BB    6    O
6    null    null     a     null    KK    70   O

Желаемый результат таблицы:

Want1, Want2, Offer1, Offer2, Type, uidW, uidO
-----  -----  ------  ------  ----  ----  ----
 a      null     a     null    KK     5    20
 null     b     null     b      LL    30    13
 a      null     a     null    KK     5    70

Можно ли использовать чистый SQL для получения этого результата?

Теги:
database

2 ответа

0
Лучший ответ

Вот решение

SELECT w.want1,
       w.want2,
       o.offer1,
       o.offer2,
       w.Type,
       w.uid AS uidW,
       o.uid AS uidO
  FROM my_table w LEFT JOIN
       my_table o ON (IFNULL(w.want1, 'x') = IFNULL(o.offer1, 'x') AND
                       IFNULL(w.want2, 'x') = IFNULL(o.offer2, 'x') AND
                       w.type = o.type)
 WHERE w.wo = 'W' AND
       o.wo = 'O';

Выход

want1   want2   offer1  offer2  Type    uidW    uidO
a   (null)  a   (null)  KK  5   20
(null)  b   (null)  b   LL  30  13
a   (null)  a   (null)  KK  5   70

Демо-версия - http://sqlfiddle.com/#!9/e1ff2e/20

  • 0
    Могу ли я также использовать INSERT INTO с вашим решением? Я хочу скопировать результат в архивную таблицу.
0

Для ваших конкретных данных:

select max(want1), max(want2), max(offer1), max(offer2),
       max(case when 'W/O' = 'W' then uid end) as UID_W,
       max(case when 'W/O' = 'O' then uid end) as UID_O
from t
group by coalesce(want1, offer1), coalesce(want2, offer2), 'W/O';

Это предполагает, что одна из двух последних строк действительно 'a', null, null.

  • 0
    Спасибо, а как насчет столбцов uidW и uidO?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню