我有2个表,代表2种不同的模型模拟。作为背景信息,2个模型试图模拟相同的事物,但是modelA试图表示非常具体的属性,而modelb试图模拟更广泛的范围。表A有n行,大于tableB中的m行。我正在尝试创建一个与表A具有相同行数(n)的表,在那里我可以看到哪个modelA_ID与modelB_IDs相关。
表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策略: - (
有什么想法吗?它不是必须经常重复的,所以效率不是关键。
由于
答案 0 :(得分: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)