如何在给定一个匹配项的情况下选择多列中的所有SQL重复项

时间:2014-03-19 23:08:54

标签: sql postgresql

我对SQL比较陌生。

在一个SQL语句中,是否有任何方法可以在SELECT语句中查找匹配项(例如... WHERE email ='test@test.com'),返回该电子邮件的所有匹配项以及与其他指定项匹配的任何人第一个SELECT语句的结果字段?

例如,假设两个用户的电子邮件为test@test.com,其中一个(或两个)的dti_id为47.表中有其他用户,其dti_id为47,没有test@test.com的电子邮件地址,但我希望它们都在同一个查询中返回。我可以用十几个SQL调用来弄清楚如何做到这一点,但我相信它可以在一次调用JOIN或子查询或其他东西时更有效地编写。

所以不要只是说

SELECT * WHERE email = 'test@test.com'

我想要的结果与我在

时得到的结果相同
SELECT * WHERE email = 'test@test.com' OR dti_id = 47 OR dti_id = 51 OR username = 'test';

如果添加了OR,则会收到来自email ='test@test.com'的结果。

1 个答案:

答案 0 :(得分:1)

您可以使用显式自联接来执行此操作。但是,我认为在in子句中使用existswhere更容易理解逻辑:

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'
             );

当你陈述它时,这直接对应于问题。从表格中选择电子邮件所在的所有行,并选择与特定字段匹配的行到该电子邮件的行。

出于性能原因,此查询最适合使用table(dti_id, email)上的索引。