加入筛选器在MySQL中未按预期工作

加入筛选器在MySQL中未按预期工作,mysql,algorithm,join,left-join,Mysql,Algorithm,Join,Left Join,我已经编写了一个MySQL查询Ad rotate算法来从多个表中获取记录 select Q2.* from User u,( select a.adId as "AdId", a.UserId as "UserId", a.Title as "Title", a.ImageURL as "ImageURL", a.RefURL as "RefURL", a.CreateDate as "Cr

我已经编写了一个MySQL查询Ad rotate算法来从多个表中获取记录

select Q2.*
from User u,(
    select 
        a.adId as "AdId",
        a.UserId as "UserId",
        a.Title as "Title",
        a.ImageURL as "ImageURL",
        a.RefURL as "RefURL",
        a.CreateDate as "CreateDate",
        a.StartDate as "StartDate",
        a.RunTill as "RunTill",
        a.Budget as "Budget",
        a.Status as "Status",
        (a.budget - COALESCE(Q1.A2,0)) as "Remaining"
    from Ad a
    LEFT JOIN(
        select
            AdId as A1,
            count(*) as A2
        from Referral 
        where date(ReferralDate)=date(CURRENT_TIMESTAMP) 
        group by AdId
    ) as Q1
    ON a.AdId = Q1.A1
    and a.StartDate<CURRENT_TIMESTAMP
    and a.RunTill>CURRENT_TIMESTAMP
    and a.Status = 1
) as Q2 
where u.Authorized = true
and u.Balance>1
and u.UserId = Q2.UserId
order by Q2.Remaining desc;
我怎样才能解决这个问题

提前谢谢。
James

您应该将a.Status=1移动到where子句:

select Q2.*
from User u,(
    select 
        a.adId as "AdId",
        a.UserId as "UserId",
        a.Title as "Title",
        a.ImageURL as "ImageURL",
        a.RefURL as "RefURL",
        a.CreateDate as "CreateDate",
        a.StartDate as "StartDate",
        a.RunTill as "RunTill",
        a.Budget as "Budget",
        a.Status as "Status",
        (a.budget - COALESCE(Q1.A2,0)) as "Remaining"
    from Ad a
    LEFT JOIN(
        select
            AdId as A1,
            count(*) as A2
        from Referral 
        where date(ReferralDate)=date(CURRENT_TIMESTAMP) 
        group by AdId
    ) as Q1
    ON a.AdId = Q1.A1
    WHERE
        a.StartDate<CURRENT_TIMESTAMP
    and a.RunTill>CURRENT_TIMESTAMP
    and a.Status = 1
) as Q2 
where u.Authorized = true
and u.Balance>1
and u.UserId = Q2.UserId
order by Q2.Remaining desc;

我想问题应该是

我正在与状态发生冲突!=1也是


原因是,作为左联接的联接条件的一部分,您有一个.Status=1。因此,正确的解决方案要么使用内部联接,要么将该筛选器作为where子句的一部分。

在发布之前,我应该自己尝试一下。它通过一个简单的调整工作。先换车后工作,然后换到哪里。你和我在同一时间得到:谢谢+1&接受:我提交答案时看到了你的评论,页面刷新了。很抱歉
select Q2.*
from User u,(
    select 
        a.adId as "AdId",
        a.UserId as "UserId",
        a.Title as "Title",
        a.ImageURL as "ImageURL",
        a.RefURL as "RefURL",
        a.CreateDate as "CreateDate",
        a.StartDate as "StartDate",
        a.RunTill as "RunTill",
        a.Budget as "Budget",
        a.Status as "Status",
        (a.budget - COALESCE(Q1.A2,0)) as "Remaining"
    from Ad a
    LEFT JOIN(
        select
            AdId as A1,
            count(*) as A2
        from Referral 
        where date(ReferralDate)=date(CURRENT_TIMESTAMP) 
        group by AdId
    ) as Q1
    ON a.AdId = Q1.A1
    WHERE
        a.StartDate<CURRENT_TIMESTAMP
    and a.RunTill>CURRENT_TIMESTAMP
    and a.Status = 1
) as Q2 
where u.Authorized = true
and u.Balance>1
and u.UserId = Q2.UserId
order by Q2.Remaining desc;