mysql没有重复行的左连接

mysql没有重复行的左连接,mysql,duplicates,left-join,Mysql,Duplicates,Left Join,也许标题不是最好的,但我不知道如何用几句话来解释它 我有两张这样的桌子: 表“用户” 表“文章用户” 我需要获得所有的用户,并知道他们是否有一个文章的关系,如果他们有这种关系,如果它是过期获取 我不需要知道哪篇文章过期了。我的意思是,如果一个用户与(至少)一篇文章的关系没有过期,答案应该是:“是的,他/她有一个活跃的关系” 我正在处理的查询是: SELECT u.*, IF(TIMEDIFF(expired_date,CURDATE())<0,'YES',IF(TIMEDIFF(expir

也许标题不是最好的,但我不知道如何用几句话来解释它

我有两张这样的桌子:

表“用户”

表“文章用户”

我需要获得所有的用户,并知道他们是否有一个文章的关系,如果他们有这种关系,如果它是过期获取

我不需要知道哪篇文章过期了。我的意思是,如果一个用户与(至少)一篇文章的关系没有过期,答案应该是:“是的,他/她有一个活跃的关系”

我正在处理的查询是:

SELECT u.*, IF(TIMEDIFF(expired_date,CURDATE())<0,'YES',IF(TIMEDIFF(expired_date,CURDATE())>0,'EXPIRED','NO')) relation
FROM users u 
LEFT JOIN article_users au ON au.user_id = u.id 
我试图用一个GROUP_CONCAT函数得到它,但我没办法得到它。我不知道这是不是正确的方法

任何帮助都将不胜感激

提前感谢。

请尝试以下方法:

设置:

create table users(
  id integer,
  name varchar(15)
);

create table article_users (
  user_id integer,
  article_id integer,
expired_date date
);

insert into users values (1, 'Alice'), (2, 'Bob'), (3, 'Charlie');
insert into article_users values (1, 1, '2016-01-01'), 
                 (1, 2, '2018-01-01'), (3, 1, '2016-01-01');
查询:

select u.name, 
       case when a.qtd>0 then 'Yes'
            when a.qtd=0 then 'Expired'
            else 'No' end as relation
  from users u
         left join 
         (select user_id, 
                 sum(if(timediff(expired_date, curdate())>0, 1, 0)) qtd
            from article_users 
           group by user_id) a on u.id = a.user_id
order by u.name;
结果:

name     relation
------------------
Alice    Yes
Bob      No
Charlie  Expired

由于SQLFiddle当前不工作,我在SQLize上添加了它。看到了吗:

是的,这就是我要找的问题。简直完美。非常感谢!
create table users(
  id integer,
  name varchar(15)
);

create table article_users (
  user_id integer,
  article_id integer,
expired_date date
);

insert into users values (1, 'Alice'), (2, 'Bob'), (3, 'Charlie');
insert into article_users values (1, 1, '2016-01-01'), 
                 (1, 2, '2018-01-01'), (3, 1, '2016-01-01');
select u.name, 
       case when a.qtd>0 then 'Yes'
            when a.qtd=0 then 'Expired'
            else 'No' end as relation
  from users u
         left join 
         (select user_id, 
                 sum(if(timediff(expired_date, curdate())>0, 1, 0)) qtd
            from article_users 
           group by user_id) a on u.id = a.user_id
order by u.name;
name     relation
------------------
Alice    Yes
Bob      No
Charlie  Expired