SQL столбец соответствия - PullRequest
0 голосов
/ 03 марта 2020

Давайте предположим, что у меня есть эти данные. Каждый человек, имеющий идентификатор, имеет 2 купона 1 и 2, которые в зависимости от способа и обратно. Например:

      ID     coupon from   to
"1000003328"    "1" "TSE"   "ALA"
"1000003328"    "2" "ALA"   "TSE"
"1000009615"    "1" "CIT"   "ALA"
"1000009615"    "2" "ALA"   "IST"
"1000014040"    "1" "DEL"   "ALA"
"1000014040"    "2" "ALA"   "FRU"
"1000017533"    "1" "KBP"   "ALA"
"1000017533"    "2" "ALA"   "PEK"
"1000020561"    "1" "ALA"   "CIT"
"1000020561"    "2" "CIT"   "ALA"
"1000026798"    "1" "GUW"   "SCO"
"1000026798"    "2" "SCO"   "GUW"

Можно ли извлечь только мужчин, где данные из строки 1 из столбца "из" купона 1 совпадают со строкой из столбца 2 из "из" купона 2? Это соответствует вышеупомянутому условию:

       ID     coupon from   to
"1000003328"    "1"  "TSE"   "ALA"
"1000003328"    "2"  "ALA"   "TSE" 

из-за того, что столбец строки 1 от «купона 1» (TSE) равен столбцу строки 2 «до» купона 2.

Спасибо вам!

Ответы [ 2 ]

1 голос
/ 03 марта 2020

С EXISTS:

select t.* from tablename t
where exists (
  select 1 from tablename
  where id = t.id and coupon <> t.coupon and "from" = t."to" and "to" = t."from"
)

Если никогда не бывает, чтобы значение from было равно to, вы можете удалить условие and coupon <> t.coupon. Смотрите демо . Результаты:

| id         | coupon | from | to  |
| ---------- | ------ | ---- | --- |
| 1000003328 | 1      | TSE  | ALA |
| 1000003328 | 2      | ALA  | TSE |
| 1000020561 | 1      | ALA  | CIT |
| 1000020561 | 2      | CIT  | ALA |
| 1000026798 | 1      | GUW  | SCO |
| 1000026798 | 2      | SCO  | GUW |
0 голосов
/ 03 марта 2020

Вы конкретно ссылаетесь на купоны "1" и "2", поэтому я бы go для:

select t.*
from t
where t.coupon in (1, 2) and
      exists (select 1
              from t t2
              where t2.id = t.id and
                    t2.from = t.to and
                    t2.to = t.from and
                    t2.coupon <> t.coupon
             );

Обратите внимание, что to и from являются очень плохим выбором для имен столбцов, потому что они SQL ключевые слова.

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