Mysql 如果条件以及不存在的位置

Mysql 如果条件以及不存在的位置,mysql,Mysql,以下是我的疑问: SELECT * FROM A WHERE NOT EXISTS (SELECT * FROM B WHERE A.ItemCode = B.ItemCode AND A.Store = B.StoreName GROUP BY B.ItemCode,B.StoreName) AND A.Store='Food Store' 如果B.DateU可以简单地在末尾添加一个条件,如果我没有弄错的话 SELECT * FROM A WHERE NOT EXI

以下是我的疑问:

SELECT *
FROM  A WHERE  NOT EXISTS
  (SELECT *
   FROM   B
   WHERE A.ItemCode = B.ItemCode AND A.Store = B.StoreName GROUP BY B.ItemCode,B.StoreName) AND A.Store='Food Store'

如果B.DateU可以简单地在末尾添加一个条件,如果我没有弄错的话

 SELECT * FROM A WHERE NOT EXISTS (SELECT * FROM B WHERE A.ItemCode = B.ItemCode AND A.Store = B.StoreName GROUP BY B.ItemCode,B.StoreName) AND A.Store='Food Store' AND B.Date < '2014-05-10'

您需要在查询中已知B的部分添加条件。即在子查询中:

SELECT *
FROM  A
WHERE NOT EXISTS (SELECT 1
                  FROM B
                  WHERE A.ItemCode = B.ItemCode AND
                        A.Store = B.StoreName AND
                        B.Date <= '2014-05-10'
                 ) AND
      A.Store = 'Food Store';

请注意,子查询中不需要GROUPBY。您不关心存在多少行或哪些行,只关心是否有行满足这些条件。我还将*替换为1。对于group by,*具有误导性,因为它没有聚合函数。我通常用1表示exists子句。

不,你不能这样做。您可以在子查询WHERE中添加该条件。我希望子查询仅在B.Date您的意思是从A中选择*,其中B.Date>“2014-5-10”或不存在时运行?假设:-A表:10条记录,B表:5条今天的记录和3条昨天的记录。如果选择了昨天的日期,则输出应为表A中的7条记录,如果选择了今天的日期,则应查找表A中的2条记录5+3,如果选择了前天,则应查找表A中的所有记录。上述查询给出了相同的记录,即B.date@user3631928。您没有提供任何数据,因此这可能是完全合适的。您能用一些示例数据设置SQL FIDLE吗?