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吗?