这句SQL怎么写?大家快!

xhfjy 2001-12-03 10:45:58
我有A,B两个表,A中有Colname1.colname2,colname3,B中有colname1,colname2,colname3,colname4,我根把A.colname1选出来,当A.colname1 in b.colname1,b.colname2,b.colname3,如果只要一个我会
如: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);
可是要从colnam2,colname3中也要取,怎么办?
...全文
809 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jack_Loo 2001-12-06
  • 打赏
  • 举报
回复
select
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
xhfjy 2001-12-04
  • 打赏
  • 举报
回复
5555555
那就是说这段SQL没法加快速度了?
love_hate 2001-12-04
  • 打赏
  • 举报
回复
想办法用存储过程吧
xhfjy 2001-12-03
  • 打赏
  • 举报
回复
呵,谢谢!我一直想用join,所以没想到三千的方法:)
现在还有一个问题,我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?
KingSunSha 2001-12-03
  • 打赏
  • 举报
回复
不是已经回了吗?思路已经在那里了,你自己稍微改一下不行吗?

“当A中ID的count=2时,就把小的放到C.colname1,大的放到C.colname2,再实行上面的规则呢”,但是如果只有一条呢?怎么办?你说明逻辑的时候最好把所有的情况都说清楚,不要老是问一点说一点。这段时间我不是很忙,否则恐怕没那么多时间一点点问。

另外,你的那段SQL中的条件都是用的函数,索引没办法用,再加上那么多OR,OR操作是最慢的逻辑操作,恐怕效率是很难提高了。
KingSunSha 2001-12-03
  • 打赏
  • 举报
回复
select a.colname1,a.colname2,b.colname4
from a, b
where a.colname1 = b.colname1
or a.colname1 = b.colname2
or a.colname1 = b.colname3
/
xhfjy 2001-12-03
  • 打赏
  • 举报
回复
呵,我在线等待各位高手!
xhfjy 2001-12-03
  • 打赏
  • 举报
回复
呵,如果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?
这个问题如果我有个前题,当A中ID的count=2时,就把小的放到C.colname1,大的放到C.colname2,再实行上面的规则呢?
xhfjy 2001-12-03
  • 打赏
  • 举报
回复
可是我的INNER JOIN B on A.colname1=B.colname1 也就要改了呀:)
IronPromises 2001-12-03
  • 打赏
  • 举报
回复
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);
Rewiah 2001-12-03
  • 打赏
  • 举报
回复
头晕!
xhfjy 2001-12-03
  • 打赏
  • 举报
回复
我加分:)
xhfjy 2001-12-03
  • 打赏
  • 举报
回复
呵呵,总不会又叫我去开个贴吧:)
KingSunSha 2001-12-03
  • 打赏
  • 举报
回复
大哥,你有完没完啊?

倒~~~~~~~
xhfjy 2001-12-03
  • 打赏
  • 举报
回复
SELECT SUBSTRING(A.OUTTXT, 4, 4)
+ '/' + 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:(
KingSunSha 2001-12-03
  • 打赏
  • 举报
回复
INSERT INTO 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
/

大概就是这样吧,只要你能保证在你说的特殊情况纪录数超过一条.
xhfjy 2001-12-03
  • 打赏
  • 举报
回复
所以亮才是难点呀:)
xhfjy 2001-12-03
  • 打赏
  • 举报
回复
因为这种情况有可能发生的:)
xhfjy 2001-12-03
  • 打赏
  • 举报
回复
1.A和B通过ID相连:)
2.b.colname2<A.colname1<b.colname3时,因为A.Colname1的记录数大于4 个,而且多个符合b.colname2<A.colname1<b.colname3时小的放到C.colname2,大的放到C.colname3
3.A中找不到符合标准的值,C中为空!
mmzxg 2001-12-03
  • 打赏
  • 举报
回复
呵呵,高手都出手了,我没的玩了。。。。。
加载更多回复(2)

34,598

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧