Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ALL的MySQL子查询_Mysql_Subquery - Fatal编程技术网

使用ALL的MySQL子查询

使用ALL的MySQL子查询,mysql,subquery,Mysql,Subquery,相关模式: 因此,明显的关系是“服务”城市。我一直在努力让所有的快递员为“两个”城市服务,cname是A和B。 i、 e.可能的交叉口 我可以通过以下方式找到解决方法: select courname from courier where courid in (select courid from courierservice where cid=(select cid from city where cname='A')) and courid in (select courid fro

相关模式:

因此,明显的关系是“服务”城市。我一直在努力让所有的快递员为“两个”城市服务,cname是A和B。 i、 e.可能的交叉口

我可以通过以下方式找到解决方法:

 select courname from courier where courid in (select courid from courierservice
 where cid=(select cid from city where cname='A')) and
 courid in (select courid from courierservice where cid=(select cid from city where cname='B'));
但是这个看起来有点重

根据文档,它应该处理以下所有子查询:

select * from courier where courid in (select courid from courierservice 
where cid = all (select cid from city where cname='A' or cname='B'));
但它返回的是一个空集

是否缺少某些内容?

尝试将cid=all替换为中的cid,它应该可以正常工作。

all返回一个集合。但当您使用“=”进行比较时,它会与元素进行比较。所以一个元素不能和一个集合相比较。如果您想知道该元素是否在集合中,则必须使用IN子句而不是“=”

使用=ALL没有意义:单个courierservice.cid如何同时等于多个city.cid?ALL仅与可以匹配多个值的比较运算符一起使用,例如>=或:请参阅

但是,最好使用JOIN重写查询,使其更简洁、更高效:

SELECT courname FROM courier NATURAL JOIN (
  SELECT   courid
  FROM     courierservice JOIN city USING (cid)
  WHERE    cname IN ('A', 'B')
  GROUP BY courid
  HAVING   SUM(cname='A') AND SUM(cname='B')
) t

西德给了我一个联盟。所有为A或B服务的快递员。我需要A和B,然后使用,而不是cname='A'或cname='B'哦,谢谢。这确实毫无意义。上述查询不起作用。现在通过教科书的方式,以下查询运行良好:从courierservice cs中选择cs.courid,city c其中c.cname='A'和cs.cid=c.cid并存在从city c2中选择cs2.cid,courierservice cs2其中cs2.courid=cs.courid和c2.cid=cs2.cid和c2.cname='B;再做一点分析,很明显,它会变得有点沉重!解决了!
SELECT courname FROM courier NATURAL JOIN (
  SELECT   courid
  FROM     courierservice JOIN city USING (cid)
  WHERE    cname IN ('A', 'B')
  GROUP BY courid
  HAVING   SUM(cname='A') AND SUM(cname='B')
) t