Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.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
另一个SQL查询_Sql_Ms Access - Fatal编程技术网

另一个SQL查询

另一个SQL查询,sql,ms-access,Sql,Ms Access,这是一个关于SQL的家庭作业问题。使用的两个表如下所示,其中的数据不相关 Restaurants RNum | RestaurantName | HQLocation 和订单表: Orders CNum | DNum | RNum | Quant | Price 我遇到的问题是,我无法确定如何指定只有客户C200订单的餐厅。查询的措辞如下: 说出那些只接受顾客C200订单的餐厅 我已经尝试了一系列不同的方法来解决这个问题,并将发布两个我认为有效的方法,尽管两个方法都没有,

这是一个关于SQL的家庭作业问题。使用的两个表如下所示,其中的数据不相关

Restaurants

    RNum | RestaurantName | HQLocation
和订单表:

Orders

    CNum | DNum | RNum | Quant | Price
我遇到的问题是,我无法确定如何指定只有客户C200订单的餐厅。查询的措辞如下:

说出那些只接受顾客C200订单的餐厅

我已经尝试了一系列不同的方法来解决这个问题,并将发布两个我认为有效的方法,尽管两个方法都没有,因为答案表应该只包含一条记录

这是我的第一次尝试:

SELECT DISTINCT R.RestaurantName
FROM Orders AS O, Restaurants AS R
WHERE (O.RNum = R.RNum)
AND (O.CNum = 'C200')
还有一个:

SELECT DISTINCT R.RestaurantName
FROM Restaurants AS R
WHERE EXISTS
              (SELECT *
               FROM Orders AS O
               WHERE (O.RNum = R.RNum)
               AND (O.Rnum = 'C200'))
排除所有其他可能性我遇到了很多麻烦,我所有的查询都会返回多条记录。有没有一种方法可以使用嵌套查询无连接来完成此操作?

尝试一下:

从餐厅中选择*,其中RNum在“从订单中选择RNum”组中,RNum的SumIIf[CNum]'C200',1,0=0

使用其他线程中的数据,3家餐厅符合标准。

尝试一下:

从餐厅中选择*,其中RNum在“从订单中选择RNum”组中,RNum的SumIIf[CNum]'C200',1,0=0


使用来自其他线程的数据,3家餐厅符合标准。

此sql将按以下方式运行:

SELECT DISTINCT RestaurantName 
FROM Restaurants 
WHERE RNum IN 
(
    SELECT RNum 
    FROM Orders 
    WHERE CNum = "C200"
)

可能此sql将按以下方式工作:

SELECT DISTINCT RestaurantName 
FROM Restaurants 
WHERE RNum IN 
(
    SELECT RNum 
    FROM Orders 
    WHERE CNum = "C200"
)

与6月7日的答案相比,有一点小小的改进:

SELECT RestaurantName FROM Restaurants WHERE RNum IN 
(SELECT RNum FROM Orders GROUP BY RNum HAVING Sum(IIf([CNum]<>'C200',1,0))=0);

与6月7日的答案相比,有一点小小的改进:

SELECT RestaurantName FROM Restaurants WHERE RNum IN 
(SELECT RNum FROM Orders GROUP BY RNum HAVING Sum(IIf([CNum]<>'C200',1,0))=0);
试试下面的代码

select distinct r.RestaurantName from Restaurants as r
inner join Orders as o ON o.RNum = r.RNum
where o.CNum='c200';
试试下面的代码

select distinct r.RestaurantName from Restaurants as r
inner join Orders as o ON o.RNum = r.RNum
where o.CNum='c200';

不排除从C200以及其他客户处获得订单的餐厅。不排除从C200以及其他客户处获得订单的餐厅。这起到了作用,我想确切了解if语句的作用,主要是其中的1,0部分,再次感谢@june7,对于每个不是C200的记录,合计金额有条件地加1,对于每个C200,加0。这意味着,如果一家餐厅的总和结果为0,那么该餐厅只有C200。这起作用了,我想确切地知道if语句在做什么,主要是它的1,0部分,再次感谢@june7。总总和是有条件地为每个不是C200的记录加1,并为每个C200加0。这意味着如果一家餐厅的总和结果为0,则该餐厅只有C200。