【问题标题】:mysql query, selecting from 3 tablesmysql查询,从3个表中选择
【发布时间】:2012-03-29 23:04:59
【问题描述】:

我正在处理从 3 个表中提取唯一值的查询。这在 2 个单独的查询中会更好吗?

查询是:

count as returned (
all leadID from lds where status = "ok"
AND leadID is also in rlds with recID="999"
AND rdate > (03-20-2012)
 + 
(all distinct leadID from plds where recID="999"
AND change != NULL
AND pdate > (03-20-2012)) 

工作查询的结果应该是“2”:leadID 1 和leadID 4

表 lds:

潜在客户 ID |状态
1 |好的
2 |不好
3 |好的

表plds:
线索ID |记录ID |改变 |更新
4 | 999 | ch1 | 03-27-2012
4 | 999 | ch2 | 03-27-2012
5 | 888 |空 | 03-27-2012

表 rlds:
线索ID |记录ID2 |日期
1 | 999 | 03-27-2012
6 | 999 | 03-27-2012

谢谢!

【问题讨论】:

    标签: mysql sql join unique


    【解决方案1】:
    SELECT Ids.leadId
    FROM
        Ids JOIN
        rlds ON rlds.leadId = Ids.LeadId AND recID = 999 AND rdate > '03-20-2012'
    WHERE Ids.Status = 'ok'
    
    UNION
    
    SELECT leadId
    FROM pIds
    WHERE recID = 999 AND change IS NOT NULL AND pdate > '03-20-2012'
    

    【讨论】:

      【解决方案2】:

      您可以使用 UNION 关键字检索 2 行的数组,第一个包含第一个匹配的计数,第二个包含第二个匹配的计数。

      然后,您可以使用 SUM 关键字在封闭选择中将两行完全相加。结果将是与您的计数竞争的单行。

      SELECT sum(1)
      FROM
      (
      SELECT count(1)
      FROM lds
      INNER JOIN rlds ON lds.leadid = plds.leadid
      WHERE lds.status='ok' AND rlds.recid2=999 AND rlds.pdate > '03-20-2012'
      
      UNION
      
      SELECT count(1)
      FROM plds
      WHERE plds.recid=999
      AND change != NULL
      AND pdate > '03-20-2012'
      ) AS tmpcount
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-09
        • 2013-07-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多