2016-07-11 2 views
1

я получил две таблицы:SQLITE слияния колонны в присоединиться

писем

raw_id | email | score 

1, email1, 1 
1, email2, 2 
2, email3, 3 
3, email4, 4 

слиты

raw_id1 | raw_id2 

1, 2 

Как я могу сделать запрос, который будет показывать мне одну строку для каждый различный row_id с максимальным score, также если два raw_id are они будут считаться одинаковыми.

Таким образом, для приведенных выше данных, вот мой ожидаемый результат:

select score, email from emails join... 
  • 3, email3
  • 4, email4

  • -
+0

Я не понимаю цели вашего объединенного стола. Теперь я понимаю. –

ответ

1
SELECT MAX(e1.raw_id, COALESCE(e2.raw_id, -1)), 
     MAX(e1.email), 
     MAX(MAX(e1.score, COALESCE(e2.score, -1))) 
FROM emails e1 LEFT JOIN merged m 
    ON e1.raw_id = m.raw_id1 
LEFT JOIN emails e2 
    ON e2.raw_id = m.raw_id2 
GROUP BY MAX(e1.raw_id, COALESCE(e2.raw_id, -1)) 

Следуйте ссылка ниже для демонстрации:

SQLFiddle

Обратите внимание, что это демо-версия для MySQL, поскольку Fiddle не предлагает опцию для SQLite. Единственное изменение, которое я должен был внести в запрос, заключалось в замене скалярной функции SQLite MAX функцией MySQL GREATEST.

+0

Я просто запускаю это, это приводит к 3 raws, email2, email3, email4 –

+0

@Ilya_Gazman Перезагрузите страницу пожалуйста. Возможно, я сделал пару изменений. –

+0

Это странно, он работает в MySql, но не в SQLite. Я добавил объяснение на ваш вопрос. –

0
SELECT max(score), email 
    FROM emails 
     LEFT JOIN 
     merged ON emails.raw_id = merged.raw_id1 
GROUP BY coalesce(raw_id2, raw_id); 
+1

Поясните свой ответ. –

+0

Уточнить, как? Это запрос, который он попросил. –

Смежные вопросы