嵌套的内连接查询

时间:2014-04-21 22:25:46

标签: sql inner-join

我有四个表叫做attr,data,extradata和syst。我必须做多个/嵌套的内连接来从所有4个表中获取一些属性,并因此而遇到问题。对于某些背景,有一个名为' ID'在'数据'我通过数据和extradata之间的内部联接获得的表格如下:

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表进行一次INNER连接。以下是我目前正在尝试的查询的缩写版本:

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'

我的查询有一些(显然)错误,所以我很感激任何建议。提前谢谢!

1 个答案:

答案 0 :(得分: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,您也可以attr加入extradata,因为data成为所有3个之间的链接。