Как выбрать все из таблицы один на основе значения, а затем выбрать из той же таблицы со значением из этой таблицы? - PullRequest
0 голосов
/ 25 апреля 2020

У меня есть таблица с пользователями, которая может выглядеть следующим образом. Где Socialnr пуст в одной или нескольких строках.

Userid:1 Phone:12345 Email:test@test.com Socialnr:88776655
Userid:2 Phone:12345 Email:              Socialnr:
Userid:3 Phone:      Email:test@test.com Socialnr:

Допустим, у меня есть Socialnr только с самого начала. Таким образом, из этого мне нужно

select * from users where socialnr=88776655

, но затем мне нужно иметь возможность выбрать две другие строки также на основе того же электронного адреса или номера телефона, который я получаю при первом выборе , Мне нужны отдельные ряды. Спасибо за любой вклад, спасибо.

На основе ответа Гордона Теперь у меня есть это с моим реальным кодом.

SELECT u.* FROM appmanager.appusers u where u.userId='797' and u.personnrvh2='88776655' OR exists (select 1 from appmanager.appusers u2 where u2.userId='797' and u2.personnrvh2='88776655'  and (u2.emailvh2 = u.emailvh2 or u2.mobilvh2 = u.mobilvh2))

Хорошо, так что это было решением, спасибо Гордон!

1 Ответ

0 голосов
/ 25 апреля 2020

Хммм. , , основываясь на вашем описании, вы можете использовать exists:

select u.*
from users u
where u.Socialnr = 88776655 or
      exists (select 1
              from users u2
              where u2.Socialnr = 88776655 and
                    (u2.email = u.email or u2.phone = u.phone)
             );

При желании вы также можете использовать оконные функции. , , при условии, что каждый email и phone имеет один конечный Socialnr

select u.*
from (select u.*,
             max(Socialnr) over (partition by email) as imputed_socialnr_email,
             max(Socialnr) over (partition by phone) as imputed_socialnr_phone
      from users u
     ) u
where 88776655 in (Socialnr, imputed_socialnr_email, imputed_socialnr_phone)
...