MySQL-如何使用left join从on子句中的联接表中精确获取一行?

MySQL-如何使用left join从on子句中的联接表中精确获取一行?,mysql,sql,left-join,Mysql,Sql,Left Join,我希望这个问题足够清楚 我的问题是: SELECT 'Total Complete' AS name, count(c.id) AS amnt FROM lanes AS c LEFT JOIN leads AS l ON ((c.carrier_mcn = l.authority_number AND l.authority_type = 'mc') OR c.carrier_mcn = l.mcn

我希望这个问题足够清楚

我的问题是:

SELECT
    'Total Complete' AS name, count(c.id) AS amnt
FROM
    lanes AS c
      LEFT JOIN leads AS l
        ON ((c.carrier_mcn = l.authority_number
              AND l.authority_type = 'mc')
          OR c.carrier_mcn = l.mcn
          OR c.carrier_mcn = CONCAT('MC', l.authority_number))
          AND c.carrier_mcn <> 0
  LEFT JOIN lanes_emails AS cem1
    ON cem1.cid = c.id AND cem1.deleted = 0
  LEFT JOIN lanes_emails AS cem2
    ON cem1.cid = cem2.cid AND cem2.deleted = 0 AND cem2.id < cem1.id
  LEFT JOIN lanes_equipment AS ceq1
    ON ceq1.cid = c.id AND ceq1.deleted = 0
  LEFT JOIN lanes_equipment AS ceq2
    ON ceq1.cid = ceq2.cid AND ceq1.deleted = 0 AND ceq2.id < ceq1.id
  LEFT JOIN lanes_service_area AS csa1
    ON csa1.cid = c.id AND AND flag = 2 csa1.deleted = 0
  LEFT JOIN lanes_service_area AS csa2
    ON csa1.cid = csa2.cid AND AND flag = 2 csa1.deleted = 0 AND csa2.id < csa1.id
WHERE
    c.carrier_mcn IS NOT NULL and c.carrier_mcn <> ''
    AND c.broker_mcn IS NOT NULL and c.broker_mcn <> ''
    AND c.fax IS NOT NULL and c.fax <> ''
    AND cem2.id IS NOT NULL
    AND ceq2.id IS NOT NULL
    AND csa2.id IS NOT NULL
选择
“全部完成”作为名称,计数(c.id)作为amnt
从…起
车道为c
左连接导线为l
ON((c.承运人编号=l.授权编号
和l.authority_type='mc')
或c.carrier_mcn=l.mcn
或c.carrier\u mcn=CONCAT('MC',l.authority\u编号))
和c.carrier_mcn 0
作为cem1的左连接电子邮件
在cem1.cid=c.id和cem1.deleted=0上
作为cem2的左连接电子邮件
在cem1.cid=cem2.cid和cem2.deleted=0和cem2.id
现在我要做的是从“通道”中获取行的总数,其中至少有一个电子邮件、设备、服务区、mc号码或传真号码。有两个MC编号,但它们都在同一张表上;主要的问题是,可以有无限的电子邮件、设备和服务区域

在这种情况下,我开始写一篇关于这个问题的文章,并发现了另一个类似的问题:

所以我尝试了一下,并在我的查询中实现了它。不幸的是,它没有按照我计划的方式工作

如果我有一排以上的话,那就行了;它会得到正确的计数,忽略我有多封电子邮件之类的事实,但如果只有一封,它就不起作用。相反,它没有返回任何结果

不,我不能使用GROUP BY获得我需要的结果;我尝试过分组方式,我喜欢在返回完整的结果列表时使用它,但如果我尝试返回计数,分组方式会重复地把我搞砸

有没有办法强制mysql中的联接只返回一行而不使用子查询?我只需要知道这些其他表中是否有一项,我不需要返回所有内容,我也不知道如何通过WHERE子句对其进行编程


我需要这个条形图查询。实际上,我有几个这样的疑问;这一个需要所有结果,但我没有其他要求,至少有一封电子邮件,至少有一个mc号码,等等,但如果我能做到这一点,我可以做到其余的工作。

你可以使用
存在
条款:

where   exists 
        (
        select  *
        from    lanes_emails AS cem1
        where   cem1.cid = c.id 
                and cem1.deleted = 0
        )
        and exists
        ...

我从来没有听说过exists子句好吧,我来看看,看是否行得通。谢谢你的提示。想想看,直到现在我才注意到它在主查询的WHERE子句中。我不认为在WHERE子句中有一种方法可以完全满足我的需要,但我会尝试一下,看看它是否有效。好吧,这似乎很有效。如果可能的话,我希望在加入时能做到正确,但只要我能让它发挥作用,好的,没问题。我只是觉得我无法让它在主查询的WHERE子句中控制所有内容。。。