У меня есть таблица с 3 столбцами с именем msg, отправитель и получатель. Теперь мне нужно получить четкого отправителя и получателя. но здесь, если у меня есть отправитель a и получатель b или отправитель b и получатель a, он показывает мне оба. но я хочу только последний.
msg | sender | receiver
hi | 1 | 5
he | 2 | 6
jh | 5 |1
SELECT DSTINCT `sender`, `receiver` from `table`
Это дает мне этот результат
1-5
2-6
5-1
Но мне нужно
5-1
2-6
Есть ли SQL-запрос, который может решить эту проблему?
2 ответа
Конечно, давайте использовать тот факт, что они являются целыми числами и всегда помещаем меньший в первый столбец и больший в правый столбец.
SELECT DISTINCT
CASE WHEN sender < receiver THEN sender ELSE receiver END as PartyA,
CASE WHEN sender < receiver THEN receiver ELSE sender END as PartyB
from `table`
Он не дает 5-1 (1-5), но я думаю, что вам все равно, вам нужен уникальный список людей, у которых был разговор, и 5-1 == 1-5
Вы также можете сделать это, используя функции least()
и greatest()
select distinct least(sender , receiver), greatest(sender , receiver)
from t
Похожие вопросы
Новые вопросы
mysql
MySQL - это бесплатная система управления реляционными базами данных с открытым исходным кодом (RDBMS), использующая язык структурированных запросов (SQL). НЕ ИСПОЛЬЗУЙТЕ этот тег для других БД, таких как SQL Server, SQLite и т. Д. Это разные БД, которые все используют свои собственные диалекты SQL для управления данными.