1

我有一张ItemPropertyValue独特ID的桌子PropertyID

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

4 回答 4

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 并且真的想在子选择类型的语句中执行此操作,我建议您检查CROSS APPLYOUTER APPLY使用这样的应用程序。

于 2013-01-15T13:08:30.183 回答
2

使用表别名:

SELECT * 
    FROM PropertyCategory 
    JOIN 
        (SELECT ItemPropertyValue.IDProperty AS PropertyID 
            WHERE ItemPropertyValue.IDItem = '10') as T
        ON PropertyCategory.IDProperty = T.PropertyID
于 2013-01-15T13:08:20.230 回答
1

我会去像

SELECT * FROM ItemPropertyValue JOIN PropertyCategory 

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

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

于 2013-01-15T13:11:23.643 回答
0

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

SELECT * FROM PropertyCategory a JOIN 
        (SELECT ItemPropertyValue.IDProperty AS PropertyID
        WHERE ItemPropertyValue.IDItem = '10')  b
        ON a.IDProperty = b.PropertyID
于 2013-01-15T13:12:55.073 回答