【问题标题】:DISTINCT clause with WHERE带有 WHERE 的 DISTINCT 子句
【发布时间】:2011-08-02 09:41:41
【问题描述】:

如何在 WHERE 中使用 DISTINCT 子句?例如:

SELECT * FROM table WHERE DISTINCT email; -- email is a column name

我想从具有不同电子邮件地址的表中选择所有列。

【问题讨论】:

  • 用词自相矛盾。您的意思是“选择电子邮件唯一的所有列”吗?
  • 查看更新的查询意味着我已在解决您的问题的答案中更新了我的查询。

标签: sql distinct where


【解决方案1】:

SELECT DISTINCT dbo.Table.Email,dbo.Table.FirstName dbo.Table.LastName, dbo.Table.DateOfBirth (etc) FROM dbo.Table.Contacts WHERE Email = 'name@email';

【讨论】:

    【解决方案2】:

    试试:

    SELECT * FROM table GROUP BY email

    • 这将返回具有唯一电子邮件的所有行,该电子邮件由第一个 ID 出现(如果有意义的话)
    • 我认为这就是您正在寻找的内容,因为我有同样的问题,但这些答案都没有为我工作。

    【讨论】:

    • 这仅在表中唯一的列是 [email] 时才有效,因为只有来自 GROUP BY 条件或聚合的列可能在 SELECT 列表中
    【解决方案3】:

    如果您的表中有一个唯一列(例如 tableid),那么试试这个。

    SELECT EMAIL FROM TABLE WHERE TABLEID IN 
    (SELECT MAX(TABLEID), EMAIL FROM TABLE GROUP BY EMAIL)
    

    【讨论】:

      【解决方案4】:

      简单查询此查询从表中选择电子邮件唯一的所有记录:

      select distinct email,* from table_name

      【讨论】:

        【解决方案5】:

        您可以使用HAVING 子句。

        SELECT * 
        FROM tab_name
        GROUP BY email_id
        HAVING COUNT(*) = 1;
        

        【讨论】:

          【解决方案6】:

          查询:

          Select *, (Select distinct email) from Table1
          

          【讨论】:

            【解决方案7】:

            这不可行吗:

             SELECT email FROM table1 t1 
                      where UNIQUE(SELECT * FROM table1 t2); 
            

            【讨论】:

            • 我不知道有很多 DBMS 已经实现了 UNIQUE 谓词。你用的是哪一个?另外,我认为您的查询是倒退的:SELECT email 不应该包含在 UNIQUE() 谓词中吗?而且我认为您需要某种连接子句 (FROM table1 t2 WHERE t2.email = t1.email)。
            【解决方案8】:

            一个简单的查询就可以做到:

            SELECT * 
            FROM table 
            GROUP BY email 
            HAVING COUNT(*) = 1;
            

            【讨论】:

            • op 没有指定 SQL 的风格,但是这个命令不会在 SQL Server 中运行,并且在 MySQL 中会产生模棱两可的结果。
            【解决方案9】:

            可能是:

            SELECT DISTINCT email,id FROM table where id='2';
            

            【讨论】:

            • @Mohit:你想说什么?请详细说明?
            • 我想选择所有具有唯一电子邮件且 id='2' 的行;
            • email 和 id 是我表中的两列
            • 我不想更新,我只想从我的表中选择行!具有唯一的电子邮件并具有 id='2';例如: - SELECT * FROM TABLE WHERE DISTINCT (email) AND id='2';我知道上面的查询是错误的,但我只想做上面查询中的事情
            • @Mohit:查看更新的查询意味着我已经在解决您的问题的答案中更新了我的查询。
            【解决方案10】:

            您可以使用 ROW_NUMBER()。您也可以指定 where 条件。 (例如以下查询中的Name LIKE'MyName%

            SELECT  *
            FROM    (SELECT ID, Name, Email,
                        ROW_NUMBER() OVER (PARTITION BY Email ORDER BY ID) AS RowNumber
                 FROM   MyTable
                 WHERE  Name LIKE 'MyName%') AS a
            WHERE   a.RowNumber = 1
            

            【讨论】:

              【解决方案11】:
              select t1.*
              from YourTable as t1
                inner join
                  (select email
                   from YourTable
                   group by email
                   having count(email) = 1 ) as t2
                  on t1.email = t2.email   
              

              【讨论】:

                【解决方案12】:

                如果您指的是电子邮件唯一的所有列:

                SELECT * FROM table WHERE email in
                     (SELECT email FROM table GROUP BY email HAVING COUNT(email)=1);
                

                【讨论】:

                • SELECT * FROM table where email in(select distinct email from table)有错吗?
                • @jWeaver...即使我最初也在想你在想什么。但是,尝试执行查询。这是错误的。
                • @Delfino a GROUP BY 根据电子邮件字符串对结果集进行分区,并应用HAVING 来决定返回哪些分区。子查询仅返回其中包含单行的分区,即唯一邮件。
                猜你喜欢
                • 2023-01-27
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2021-11-17
                • 2011-07-23
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多