Sql 从一个表中选择值,该值介于另一个表的两个变量之间
我有两张桌子,t1和t2Sql 从一个表中选择值,该值介于另一个表的两个变量之间,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
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