代码之家  ›  专栏  ›  技术社区  ›  OSdave

mysql选择count=0的位置

  •  8
  • OSdave  · 技术社区  · 14 年前


    我认为mysql查询是可行的,但事实并非如此:

    SELECT s.*
    FROM sales s NATURAL JOIN sales_item si
    WHERE s.date like '" . ((isset($_GET['date'])) ? $_GET['date'] : date("Y-m-d")) . "%'
    AND s.sales_id like '" . ((isset($_GET['shop'])) ? $_GET['shop'] : substr($_COOKIE['shop'], 0, 3)) ."%'
    HAVING count(si.sales_item_id) = 0;
    

    7 回复  |  直到 14 年前
        1
  •  16
  •   Tobias P.    14 年前

    表别名v从何而来? 显示表定义将是一个非常好的主意;)

    必须是左连接:

    SELECT *
    FROM table1
    LEFT JOIN table2 ON(table1.id = table2.table1_id)
    WHERE table2.table1_id IS NULL
    

        2
  •  7
  •   Salil    14 年前

    总是和小组一起使用的

    GROUP BY si.sales_item_id
    HAVING count(si.sales_item_id) = 0;
    
        3
  •  4
  •   Victor Stanciu    14 年前

    您不需要加入这些表,可以使用以下方法:

    [...] WHERE sales.id NOT IN (SELECT sales_id FROM sales_item)
    

        4
  •  1
  •   Phil Wallach    14 年前

    为了完整。。。。

    SELECT S.*
    FROM SALES S 
    WHERE NOT EXISTS (
        SELECT 1 
        FROM SALES_ITEM SI 
        WHERE SI.SALES_ITEM_ID = S.ID)
    

    MySQL在IN子句中可能有问题。

        5
  •  0
  •   ZombieSheep    14 年前

    假设sales\u item中的每个项目都有一个与之相关联的sales\u id,您可能正在查找所有没有项目的销售。

    使用子查询怎么样?从sales表中获取所有sales\u id,其中items表中不存在该id。。。

    SELECT * from sales where sales_id not in (SELECT DISTINCT sales_id from sales_item)
    

    (注:确切的语法可能是错误的,但如果我正确理解了问题,这个想法应该是正确的)

        6
  •  0
  •   Kari    14 年前

    联接正在限制要显示的行。 我的建议是忘记join,改为使用以下内容:

    销售收入

    基本上,返回没有任何关联销售项目的销售。

    祝你好运

        7
  •  0
  •   Michał Pękała    14 年前

    您可能应该按销售项目id对行进行分组。

    SELECT s.id, count(*) as no_of_items
    FROM sales s NATURAL JOIN sales_item si
    WHERE s.date like '" . ((isset($_GET['date'])) ? $_GET['date'] : date("Y-m-d")) . "%'
      AND v.sales_id like '" . ((isset($_GET['shop'])) ? $_GET['shop'] : substr($_COOKIE['shop'], 0, 3)) ."%'
    GROUP BY si.salesitem_id
    HAVING no_of_items = 0;