如何在给定一个匹配项的多个列中选择所有SQL重复项
我对SQL比较陌生 在一个SQL语句中,是否有任何方法可以在SELECT语句中查找匹配项(例如…WHERE)test@test.com“),返回该电子邮件的所有匹配项以及与第一个SELECT语句的结果中的另一个指定字段匹配的任何人 例如,假设两个用户收到了电子邮件test@test.com,其中一个(或两者)的dti_id为47。表中还有dti_id为47的其他用户的电子邮件地址为test@test.com,但我希望它们都在同一个查询中返回。我可以在十几个SQL调用中找到解决方法,但我很有信心,在一个调用中执行联接、子查询或其他操作可以更有效地编写它 所以与其说如何在给定一个匹配项的多个列中选择所有SQL重复项,sql,postgresql,Sql,Postgresql,我对SQL比较陌生 在一个SQL语句中,是否有任何方法可以在SELECT语句中查找匹配项(例如…WHERE)test@test.com“),返回该电子邮件的所有匹配项以及与第一个SELECT语句的结果中的另一个指定字段匹配的任何人 例如,假设两个用户收到了电子邮件test@test.com,其中一个(或两者)的dti_id为47。表中还有dti_id为47的其他用户的电子邮件地址为test@test.com,但我希望它们都在同一个查询中返回。我可以在十几个SQL调用中找到解决方法,但我很有信心,
SELECT * WHERE email = 'test@test.com'
我想要和我做的一样的结果
SELECT * WHERE email = 'test@test.com' OR dti_id = 47 OR dti_id = 51 OR username = 'test';
将ORs添加到其中,因为它们是来自电子邮件的结果test@test.com“。您可以通过显式自联接来实现这一点。但是,我认为使用
in
或exists
inwhere
子句更容易理解逻辑:
select t.*
from table t
where t.email = 'test@test.com' or
exists (select 1
from table t2
where t2.dti_id = t.dti_id and
t2.email = 'test@test.com'
);
这相当直接地对应于你所说的问题。从表中选择电子邮件所在的所有行,并选择某个字段中与该电子邮件所在行匹配的行
出于性能原因,此查询最好与
表(dti\U id,电子邮件)
上的索引配合使用。请向我们显示一些示例数据和预期输出(请记住,您可以使用
标记格式化文本)。在第一条注释的第二行。数据库表的模式也会有帮助。我刚刚添加了一些示例SQL,这能更好地解释它吗?模式只是一个users表,其中包含一些关于用户的列。我只是随机选择了dti_id和用户名,因为它们的名称并不重要。只有表中需要匹配的其他特定列(一个是整数,另一个是文本)。而“表”应替换为我的表的名称?@DanGoodspeed。对你的问题不包括表的名称。我花了几个小时试图让它工作,当我在你写它时使用它时,它只是挂起。删除或停止挂起后的所有内容。我确实发现你在选择中漏掉了*号,你确定其他一切都是正确的吗?@DanGoodspeed。这个表有多大?大概有10000条左右。