select A.colname1,a.colname2,b.colname4 from A INNER JOIN B on A.colname1=B.colname1 where a.colname1 in (select b.colname1 from b union all select b.colname2 from b union all select b.colname3 from b);
解决方案 »
- 大家有没有碰到过复制很多脚本给isqlw,一起执行,结果漏掉几行未执行的情况?
- 同一服务器上的两个数据库同步
- 关于标准SQL与MS SQL中的count()聚合函数的区别?
- 在企业管理器中,怎么注册服务器的???
- 〔困惑〕帮忙设计一个库结构
- 请教高手一个SQL题,小弟之前发的题是无解的,那是写错了!!!
- 请推荐一款数据库管理工具
- 两个表中,查询到一条记录就返回继续下一条的查找,在这种情况下,如何提高Select的效率
- 兄弟们,小弟我急啊!(100分的求助)
- 求救!!求救!!TEXT 类型读取出错!!!
- 高分求解,怎么把一台机的SQLServer数据库的数据导出到另外一台机的SQLServer数据库?
- 错在哪?如何解决?
from a, b
where a.colname1 = b.colname1
or a.colname1 = b.colname2
or a.colname1 = b.colname3
/
现在还有一个问题,我A有个id(有重复),colname1,B有个id(无重复),colname1,colname2,colname3,colname4,
我要把A的colname1的值放到C的id(无重复),colname1,colname2,colname3,colname4中,
判断就是,如 b.colname1-2<A.colname1<b.colname1+1就放到C.colname1,b.colname2<A.colname1<b.colname3时,小的放到C.colname2,大的放到C.colname3,b.colname4-1<A.colname1<b.colname4+3就放到C.colname4?
1. A和B通过ID相连吗?
2. "b.colname2<A.colname1<b.colname3时,小的放到C.colname2,大的放到C.colname3"看不明白,什么是大/小的标准?
3. 如果A中找不到符合标准的值,是不是用B中的值?
2.b.colname2<A.colname1<b.colname3时,因为A.Colname1的记录数大于4 个,而且多个符合b.colname2<A.colname1<b.colname3时小的放到C.colname2,大的放到C.colname3
3.A中找不到符合标准的值,C中为空!
select id,
(select min(colname1) from a a1
where a1.colname1 > b.colname1 - 2
and a1.colname1 < b.colname1 + 1) colname1,
(select min(colname1) from a a2
where a2.colname1 > b.colname2
and a2.colname1 < b.colname3) colname2,
(select max(colname1) from a a3
where a3.colname1 > b.colname2
and a3.colname1 < b.colname3) colname3,
(select min(colname1) from a a4
where a4.colname1 > b.colname4 - 1
and a4.colname1 < b.colname4 +3) colname4
from b
/大概就是这样吧,只要你能保证在你说的特殊情况纪录数超过一条.
+ '/' + SUBSTRING(A.OUTTXT, 8, 2)
+ '/' + SUBSTRING(A.OUTTXT, 10, 2) AS readdate,
SUBSTRING(A.OUTTXT, 12, 2)
+ ':' + SUBSTRING(A.OUTTXT, 14, 2)
+ ':' + SUBSTRING(A.OUTTXT, 16, 2) AS readtime,
SUBSTRING(A.OUTTXT, 18, 10) AS cardnumber, B.ManID,
C.ManName, C.WorkTime
FROM dbo.ManData INNER JOIN
B ON C.ManID = B.ManID CROSS JOIN
A
WHERE (SUBSTRING(A.OUTTXT, 18, 10) = B.CardNumber OR
SUBSTRING(A.OUTTXT, 18, 10) = B.CardNumber1 OR
SUBSTRING(A.OUTTXT, 18, 10) = B.CardNumber2 OR
SUBSTRING(A.OUTTXT, 18, 10) = B.CardNumber3 OR
SUBSTRING(A.OUTTXT, 18, 10) = B.CardNumber4) AND
(B.ManID IN
(SELECT manid
FROM C))
能再优化吗?A中60万条,B中1万条,C中1万条,我居然用了10分钟多没出来:(
机器P3-800,256M:(
我要把A的colname1的值放到C的id(无重复),colname1,colname2,colname3,colname4中,
判断就是,如 b.colname1-2<A.colname1<b.colname1+1就放到C.colname1,b.colname2<A.colname1<b.colname3时,小的放到C.colname2,大的放到C.colname3,b.colname4-1<A.colname1<b.colname4+3就放到C.colname4?
这个问题如果我有个前题,当A中ID的count=2时,就把小的放到C.colname1,大的放到C.colname2,再实行上面的规则呢?
那就是说这段SQL没法加快速度了?
A.colname1,
a.colname2,
b.colname4
from
A
INNER JOIN (
select
colname1 as colname1
from b
union
select
colname2 as colname1
from b
union
select
colname3 as colname1
from b) b on A.colname1=B.colname1