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 次にjoinsecond table PropertyCategory

だから私はこのようなsmthを持っています:

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 APPLYますOUTER 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 に答える