从MySQL中选择唯一行

时间:2016-10-01 01:50:05

标签: mysql sql

希望你们能帮忙,因为这已经困扰了我几天了。我正在尝试从表中获取唯一行的总数。例如,表中的数据如下所示;

 user_1 | user_2 | date_added          | date_removed        
--------|--------|---------------------|---------------------
 1      | 2      | 2016-09-20 15:51:45 | 2016-09-24 09:15:32 
 1      | 3      | 2016-09-21 10:16:03 | 2016-09-29 00:46:44
 6      | 1      | 2016-09-23 05:48:59 | 0000-00-00 00:00:00
 1      | 3      | 2016-09-30 09:57:16 | 0000-00-00 00:00:00

我想要找到的是user_id出现的总行数(列user_1或列user_2),其中只有一个条目用于该用户配对(用户配对将始终位于相同的列中),date_removed = 0000-00-00 00:00:00

因此,如果我在上面的表格中搜索user_id'1',则总数将为“1”。 (只有第3行匹配搜索标准); 搜索user_id'2'将等于'0'; '{3'的user_id等于'0'; '{6'的user_id等于'1';

希望这是有道理的。任何帮助或指示将不胜感激。

----编辑----

这是我到目前为止的查询,我尝试了几种方式加入等等,但这让我最接近目前为止,并不是最清洁的方式!

SELECT COUNT(*) AS `count` 
FROM `table` 
WHERE (`user_1` = '1' OR `user_2` = '1') 
GROUP BY `user_1`, `user_2` 
HAVING `count` < '2' AND MAX(`date_removed`) < '0000-00-00 00:00:01'

但是,当表中显示更多数据时,查询结果如下所示:

count
-----
1
1
1

我希望它显示在哪里:

count
-----
3

1 个答案:

答案 0 :(得分:0)

实现这一目标的方法不止一种。 我发送了一个选项,创建了一个视图以使其更容易,但如果您不想创建视图,则可以在子查询中使用其代码。

  1. 创建一个视图以合并user1,user2

    的所有可能组合
    create view result as
    select user1, user2, date_removed from test
    union all
    select user2, user1, date_removed from test
    
  2. 创建查询

    select r.user1, r.user2
    from result r
    where
        r.date_removed = '0000-00-00 00:00:00'
        and r.user2 not in (select r2.user2 
                            from result r2 
                            where r2.date_removed <> '0000-00-00 00:00:00')
    
  3. 希望它可以帮助你解决它。