2

我有 2 个表格,代表 2 个不同的模型模拟。作为背景信息,这 2 个模型试图模拟相同的事物,但 modelA 试图表示非常具体的属性,而 modelb 试图模拟更广泛的范围。表 A 有 n 行,大于表 B 中的 m 行。我正在尝试创建一个与表 A 具有相同行数 (n) 的表,在该表中我可以看到哪些 modelA_ID 与 modelB_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

但是 region 不是唯一的键,所以我不能这样做!

几天前刚接触 SQL,但来自 cshell 背景,但新工作只有 sql 政策:-(

有任何想法吗?这不是必须经常重复的事情,因此效率不是关键。

谢谢

4

1 回答 1

1

但是 region 不是唯一的键,所以我不能这样做!

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 回答