2

2 つの異なるモデル シミュレーションを表す 2 つのテーブルがあります。背景情報として、2 つのモデルは同じことをシミュレートしようとしていますが、modelA は非常に具体的な属性を表現しようとしますが、modelb はより広い範囲をモデル化しようとします。テーブル A には、テーブル B の m 行よりも大きい n 行があります。テーブル A と同じ行数 (n) のテーブルを作成しようとしています。このテーブルでは、どのモデル A_ID がモデル B_ID に関連しているかを確認できます。

表 A:

ModelA_ID  region height weight
1          1       25      7.1            
2          1       70      7.1            
3          1       10      7.2            
4          1       30      7.3
5          1       35      7.4
6          2       30      7.1

表 B:

ModelB_ID  region min_height max_height min_weight max_weight
9001       1        0             50      7.1        7.3    
9002       1        51            100     7.1        7.3
9003       1        0             100     7.4        7.5
9004       2        0             100     7.1        7.5

したがって、上記の例では、次の行に沿って何かで終了する必要があります

ModelA_ID  ModelB_ID    
1        9001            
2        9002            
3        9001            
4        9001      
5        9003     
6        9004

リージョンはどちらのテーブルでも一意ではありません。もしそうなら、私はそれに参加すると思います。

SELECT  TableA.ModelA_ID TableB.ModelB_ID 
FROM TableA
inner JOIN TableA
ON TableA.region =TableB.region
where 
TableA.height >= TableB.min_height
and TableA.height <= TableB.max_height
and TableA.weight >= TableB.min_weight
and TableA.weight <= TableB.max_weight

ただし、地域は一意のキーではないため、それはできません!

数日前にSQLを初めて使用しましたが、cshellのバックグラウンドから来ましたが、新しいジョブにはSQLのみのポリシーがあります:-(

何か案は?頻繁に繰り返さなければならないものではないので、効率は重要ではありません。

ありがとう

4

1 に答える 1

1

ただし、地域は一意のキーではないため、それはできません!

JOIN 列がそれぞれのテーブルの主キーである必要はありません。

SELECT 
    TableA.ModelA_ID,
    TableB.ModelB_ID 
FROM 
    TableA
    JOIN TableB
    ON TableA.region = TableB.region
WHERE 
    TableA.height >= TableB.min_height
AND TableA.height <= TableB.max_height
AND TableA.weight >= TableB.min_weight
AND TableA.weight <= TableB.max_weight

上記のクエリの結果は次のとおりです。

ModelA_ID   ModelB_ID
----------- -----------
1           9001
3           9001
4           9001
2           9002
5           9003
6           9004

(6 row(s) affected)
于 2012-09-25T17:10:08.727 に答える