【问题标题】:T-SQL - joining two tables without primary keyT-SQL - 连接两个没有主键的表
【发布时间】:2012-09-17 06:08:57
【问题描述】:

我有 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 政策 :-(

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

谢谢

【问题讨论】:

  • 您的查询有什么问题?你可能会得到多个答案,但除非你能提出更多标准,否则我认为这是你能得到的最好的答案。
  • 你可能想要FROM TableA inner JOIN Table**B**
  • 好的,谢谢大家。我得到的结果太多了,这让我很困惑。令人尴尬的是,我的代码有一个 ''

标签: sql-server tsql join


【解决方案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)

【讨论】:

  • 谢谢,您的回答让我仔细检查了我的,并更正了我的“>”中的“
猜你喜欢
  • 2017-01-25
  • 1970-01-01
  • 2019-06-24
  • 2010-12-20
  • 2019-06-06
  • 2014-08-04
  • 1970-01-01
  • 2021-03-08
  • 1970-01-01
相关资源
最近更新 更多