如何 select 全部来自 table 一个基于一个值,然后 select 来自同一个 table 以及那个 table 的值?
How to select all from table one based on a value, then select from same table with value from that table?
我有一个 table 用户看起来像这样。
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 其他两行以及基于我从第一个 select 获得的相同电子邮件或电话号码。
我需要单独的行。
感谢任何输入,谢谢。
根据 Gordon 的回答,我现在用我的真实代码有了这个。
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))
好的,这就是解决方案,非常感谢 Gordon!
嗯。 . .根据您的描述,您可以使用 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)
);
如果需要,您也可以使用 window 函数。 . .假设每个 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)
我有一个 table 用户看起来像这样。 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 其他两行以及基于我从第一个 select 获得的相同电子邮件或电话号码。 我需要单独的行。 感谢任何输入,谢谢。
根据 Gordon 的回答,我现在用我的真实代码有了这个。
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))
好的,这就是解决方案,非常感谢 Gordon!
嗯。 . .根据您的描述,您可以使用 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)
);
如果需要,您也可以使用 window 函数。 . .假设每个 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)