【问题标题】:Nested or correlated subquery SQL嵌套或相关子查询 SQL
【发布时间】:2019-09-16 23:58:21
【问题描述】:

我有以下关系代数任务,我需要将其转换为 SQL 查询,与 Microsoft SQL Server 兼容:

相关表格如下:

Raw_Materials_t:material_ID,material_description,

Supplies_t:Vendor_ID、Material_ID、Unit_Price

Vendor_t:Vendor_ID、Vendor_Name

SELECT DISTINCT V.Vendor_ID
FROM Raw_Materials_t R, Supplies_t S, Vendor_t V
WHERE R.Material_description = 'walnut'
  AND S.Unit_price < 14
  AND R.Unit_price < 14
  AND V.Vendor_ID = S.Vendor_ID

有人告诉我,我的查询确实产生了正确的结果,但它没有明确使用有序的关系代数步骤。所以我需要做的是:

  1. (自然?)在 Supplies_t 上加入 Raw_Materials_t,仅选择 material_description 为 walnut 且 unit_price 低于 $14 的行
  2. 获取这些结果,仅投影 Vendor_ID 列(丢弃其他列)
  3. 在 Vendor_t 上加入此专栏
  4. 仅投影上述结果中的 Vendor_Name 列。

这是嵌套子查询还是相关子查询?我对这两个都不熟悉,也不知道如何进行。

【问题讨论】:

  • 您的最后两个问题听起来像是您想在 RA 中获得一些答案。但是您的开场白说“转换为 SQL 查询”。你给出一个 SQL 查询。所以我不明白你还想要什么。 “相关子查询”是一个仅适用于 SQL 的术语,并且在您提供的 SQL 中没有。 RA 是一个代数,这意味着 RA 查询通常具有嵌套的运算符调用。因为它是一个代数,所以通常不会谈论“嵌套子查询”,而不是谈论“嵌套算术表达式”。同样,“嵌套子查询”更像是 SQL 中的一个术语。

标签: sql sql-server correlated-subquery relational-algebra


【解决方案1】:

Material 和其他任何东西之间没有连接条件。

这是完整的查询,只是简单的连接,没有相关的查询或子查询:

SELECT distinct V.Vendor_ID 
FROM Raw_Materials_t R
join Supplies_t S on S.Material_ID=R.Material_ID
join Vendor_t V on V.Vendor_ID=S.Vendor_ID
WHERE R.Material_description = 'walnut' AND S.Unit_price < 14  

【讨论】: