Sql 从一个表中选择值,该值介于另一个表的两个变量之间

Sql 从一个表中选择值,该值介于另一个表的两个变量之间,sql,Sql,我有两张桌子,t1和t2 t1 ID P CODE 3 11 19 5 5 118 8 Null 212 6 8 992 t2 ID c1 C2 3 1 99 3 100 199 3 200 299 5 500 999 如何选择t2的所有列和值为p的加法列,其中t1.code在c1和c2之间 像 谢谢一种方法是使用相关子查询: select t2.*, (select t1.p

我有两张桌子,t1和t2

t1
ID  P     CODE
3   11     19
5   5      118
8   Null   212
6   8      992

t2
ID  c1  C2
3   1   99  
3   100 199
3   200 299
5   500 999
如何选择t2的所有列和值为p的加法列,其中t1.code在c1和c2之间 像


谢谢

一种方法是使用相关子查询:

select t2.*,
       (select t1.p
        from t1
        where t1.code between t2.c1 and t2.c2
        limit 1
       ) as p
from t2;
您也可以通过连接来实现这一点。如果存在多个匹配项,则相关子查询将只返回一个值。注意:这使用了限制,几乎所有数据库都可以使用此功能,但可能有不同的名称

如果多个匹配的问题不是什么大问题,您可以将其称为连接:

如果Id在T1中是唯一的

Select t2.Id, t2.C1, t2.C2, t1.p      
From t2 left Join t1
    On t1.Id = t2.Id
       And t1.code between t2.c1 and t2.c2

你想让t1.ID=t2.ID吗?如果是这样的话,那么前两个答案就可以了。否则,您将得到类似这样的结果:在c1和t2之间的代码上,从t1内部连接t2中选择t1.p,t2.*c2@user3362749-我已回滚您的更改-您的编辑使数据无法读取。需要在上添加其他加入条件吗ID@CharlesBretana . . . 我不明白为什么这有助于回答这个问题。戈登,我可能错了,但我假设他想查看t1中与他在t2中检查的每一行ID相关的特定行。但进一步检查,t2中的值对c1、c2的范围也是唯一的。这混淆了问题。
select t2.*, t1.p
from t2 left outer join
     t1
     on t1.code between t2.c1 and t2.c2;
Select t2.Id, t2.C1, t2.C2, t1.p      
From t2 left Join t1
    On t1.Id = t2.Id
       And t1.code between t2.c1 and t2.c2