SQL Server 尝试重新表述查询

sql server trying to rephrase a query

提问人:Βασίλης Χατζηπαντελή 提问时间:11/16/2022 最后编辑:Βασίλης Χατζηπαντελή 更新时间:11/16/2022 访问量:46

问:

我尝试以不同的方式执行以下查询。

SELECT distinct x FROM R as sx
WHERE NOT EXISTS (
(SELECT p.y FROM S as p )
EXCEPT
(SELECT sp.y FROM  R as sp WHERE sp.x = sx.x ) );

我有以下查询,用于在sql server中实现除法。我遇到语法错误,我不知道为什么。我有表 S(y) y->主键、R(x,y) x->主键、y->外键引用 S(y)。X 是供应商 ID,Y 是产品 ID。我想找到销售所有产品的供应商。

数据示例

小圆(1,2,3,4,5)

R x(101,101,102,102,102,102,102,103) y(1,3,1,2,3,4,5,2)

输出 x(102)

SELECT x FROM R
EXCEPT
SELECT x FROM (
    SELECT x, y
    FROM (select x FROM R), S
    EXCEPT
    SELECT x, y FROM R
);

我收到以下语法错误。

Msg 102, Level 15, State 1, Line 5 Incorrect syntax near ','.
Msg 102, Level 15, State 1, Line 8 Incorrect syntax near ')'.
sql-server 语法错误

评论

1赞 Stu 11/16/2022
您没有为派生表提供别名,这是做什么的?, S
0赞 Patrick Tucci 11/16/2022
x is supplier id and y is product id那你为什么要制作它们,并在示例中制作它们? 在微积分和离散数学中是很好的符号,但在 SQL 等语言中,人们通常会选择有意义的表名和变量名。xyS(y) y => primary key

答:

0赞 Nenad Zivkovic 11/16/2022 #1

您可以只计算每个 x 的 y 的不同值,并将其与 s 中 y 的计数进行比较

SELECT x 
FROM R
GROUP BY x
HAVING COUNT(DISTINCT y) = (SELECT COUNT(DISTINCT y) FROM s)

编辑: ..而你的第二个查询给你带来了语法错误,因为你没有在子查询上放置别名,而当你加入它们时,这是需要的。

SELECT x FROM R
EXCEPT
SELECT x FROM (
    SELECT x, y
    FROM (select x FROM R) r1, S
    EXCEPT
    SELECT x, y FROM R
) r2;