使用SELECT作为JOIN的值

时间:2013-01-15 13:04:58

标签: sql select join

我的表格ItemPropertyValue包含唯一的IDPropertyID

ID IDProperty Value ItemID
1  1            1    5 
2  2            2    6
3  3            2    10
4  4            2    15

另一张名为PropertyCategory

的表格
IDProperty  Value  Name
1           1      First Option
1           2      Second Option
2           1      Another option

我想要的是 - 从第一个表PropertyID选择ItemPropertyValue ItemID = 10,然后join选择second table PropertyCategory

所以我喜欢这样:

IDProperty  Value  Name
1           1      First Option
1           2      Second Option
2           1      Another option

我尝试了这个,但是有一个错误。没有像PropertyID

这样的列
    SELECT * FROM PropertyCategory JOIN 
    (SELECT ItemPropertyValue.IDProperty AS PropertyID
    WHERE ItemPropertyValue.IDItem = '10') 
    ON PropertyCategory.IDProperty = PropertyID

我该怎么做?

MS SQLServer(如果有的话)

4 个答案:

答案 0 :(得分:3)

尝试对子选择进行别名

SELECT * FROM PropertyCategory JOIN 
(SELECT ItemPropertyValue.IDProperty AS PropertyID
WHERE ItemPropertyValue.IDItem = '10') a
ON PropertyCategory.IDProperty = a.PropertyID

此外,这可以作为常规联接在外部WHERE子句中发生过滤,例如

SELECT *
FROM PropertyCategory
JOIN ItemPropertyValue ON PropertyCategory.IDProperty = ItemPropertyValue.IDProperty
WHERE ItemPropertyValue.IDProperty = '10'

最后,如果您正好使用SQL Server而 希望在subselect-type语句中执行此操作,我建议您查看CROSS APPLY或{{1}对于这样的应用程序。

答案 1 :(得分:2)

使用表别名:

SELECT * 
    FROM PropertyCategory 
    JOIN 
        (SELECT ItemPropertyValue.IDProperty AS PropertyID 
            WHERE ItemPropertyValue.IDItem = '10') as T
        ON PropertyCategory.IDProperty = T.PropertyID

答案 2 :(得分:1)

我会选择像

这样的东西
SELECT * FROM ItemPropertyValue JOIN PropertyCategory 

ON ItemPropertyValue.IDProperty = PropertyCategory.IDProperty WHERE ItemPropertyValue.ItemID = 10

您可以通过将*替换为字段来限制SELECT中的几个字段。

答案 3 :(得分:0)

你做得很好,只需在表名中添加别名就行了

SELECT * FROM PropertyCategory a JOIN 
        (SELECT ItemPropertyValue.IDProperty AS PropertyID
        WHERE ItemPropertyValue.IDItem = '10')  b
        ON a.IDProperty = b.PropertyID