我的表格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(如果有的话)
答案 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