MySQL嵌套计数和返回值

时间:2014-08-20 23:49:12

标签: mysql sql

我已经搜索过高低,似乎无法找到我想要的方法。我有一张桌子,里面有一些顾客,一些产品和他们的关系。

我想从查询的这一部分计算返回行的数量

SELECT id
FROM customer
WHERE customer.name = 'SMITH'
OR customer.name = 'JONES'   

我还想返回与SMITH和JONES(或其他客户名称)匹配的ID。我想使用返回行的计数作为变量(表示为@var)。我只想返回与我的变量匹配的产品,ID和计数。

我的问题是:

  1. 有没有办法在单个SQL查询中完成此操作?
  2. 有没有办法返回计数和值?
  3. 我不想把它扔进PHP脚本等。

    SELECT x.pId, p.productdesc, count(x.dId) as count
    FROM 
    (
        SELECT DISTINCT cId, pId 
        FROM Client 
        WHERE cId IN
        (
            SELECT id
            FROM customer
            WHERE customer.name = 'SMITH'
            OR customer.name = 'JONES'
    
        )   
    )x 
    JOIN Products p ON x.pId = p.id 
    GROUP BY x.pId 
    HAVING count = @var
    
  4. 谢谢,

    中号

1 个答案:

答案 0 :(得分:0)

这是对你问的内容的'文字'答案,因为你可以在having子句中使用子查询。但是,有了更多信息(样本数据和预期结果),可能有更好的方法来做你想做的事。

select x.pid, p.productdesc, count(x.pid) as count
  from (select distinct cl.cid, cl.pid
          from client cl
          join customer cu
            on cl.cid = cu.id
         where cu.name in ('SMITH', 'JONES')) x
  join products p
    on x.pid = p.id
 group by x.pid, p.productdesc
having count(x.pid) = (select count(*)
                         from customer
                        where name in ('SMITH', 'JONES'))