【问题标题】:Nested Inner join query嵌套内连接查询
【发布时间】:2014-04-21 22:25:46
【问题描述】:

我有四个表,分别称为 attr、data、extradata 和 syst。我必须执行多个/嵌套内部连接才能从所有 4 个表中获取一些属性,并因此遇到问题。对于某些背景,在“数据”表中有一个名为“ID”的列,我通过数据和额外数据之间的内部连接获得如下:

Select X.ID FROM data X 
INNER JOIN extradata XA 
ON X.dataID = XA.dataID 
WHERE X.data = 'condition1' and NOT XA.additionaldata = 'condition2'

这个 ID 必须与 attr 表中的 ID 匹配,并且与 syst 表中的 ID 相匹配。以下是我目前正在尝试的查询的一个非常简略的版本:

SELECT TOP(10) a.ID 
FROM attr AS a 
INNER JOIN data AS X ON a.ID = 
(
    Select X.ID FROM data X 
    INNER JOIN extradata XA 
    ON X.dataID = XA.dataID 
    WHERE X.data = 'condition1' and NOT XA.additionaldata = 'condition2'
)
INNER JOIN syst AS s ON a.sysID = s.sysID
WHERE s.desc = 'condition3'

我的查询(显然)有问题,因此我将不胜感激任何建议。提前致谢!

【问题讨论】:

  • 我不清楚你为什么要嵌套而不是仅仅在同一深度进行多个连接。
  • 我不知道如何进行多个连接,因为 attr 和 extradata 之间没有公共列。这就是我选择嵌套连接的原因

标签: sql inner-join


【解决方案1】:

假设attr.ID 映射到data.ID,您可以简单地将所有表连接在一起,并且所有条件都放在您的WHERE 子句中:

SELECT TOP(10) a.ID 
FROM attr AS a 
    INNER JOIN data AS X ON a.ID = x.ID
    INNER JOIN extradata XA ON X.dataID = XA.dataID
    INNER JOIN syst AS s ON a.sysID = s.sysID
WHERE X.data = 'condition1' 
  and NOT XA.additionaldata = 'condition2'
  and s.desc = 'condition3'

加入attrdata 允许您也加入attrextradata,因为data 成为所有3 之间的链接。

【讨论】:

    猜你喜欢
    • 2019-05-05
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-12
    • 2014-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多