提问人:Βασίλης Χατζηπαντελή 提问时间:11/16/2022 最后编辑:Βασίλης Χατζηπαντελή 更新时间:11/16/2022 访问量:46
SQL Server 尝试重新表述查询
sql server trying to rephrase a query
问:
我尝试以不同的方式执行以下查询。
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 ')'.
答:
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;
评论
, S
x is supplier id and y is product id
那你为什么要制作它们,并在示例中制作它们? 在微积分和离散数学中是很好的符号,但在 SQL 等语言中,人们通常会选择有意义的表名和变量名。x
y
S(y) y => primary key