一个数学问题的查询

liuliu13654002686 2009-11-16 09:26:35
问题: 在一条数轴上 有一段线段 AB区间 现在要查询 AB区间段内包含的所有线段。包括以下几种情况:
1 线段开始与结束节点 都在AB段内。
2 线段的结束节点 在AB段内,而 开始节点不在此区间。
3 线段的开始节点 在AB端内 而结束节点不在此区间。
数据库中表结构为 id begin end 三个字段 id 为主键 begin为开始节点 end 为结束节点 表名为table
需要得到的答案是如何实现上述的SQL查询语句。 谢谢
...全文
179 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuliu13654002686 2009-11-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ztgis 的回复:]
SQL codeSELECT*FROM 你的表名字WHEREbeginBETWEEN'起点'AND'终点'ORendBETWEEN'起点'AND'终点'
[/Quote]
这条语句 应该都包括了 大家看看是不是
luoyoumou 2009-11-16
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 liuliu13654002686 的回复:]
引用 9 楼 luoyoumou 的回复:
SQL codewhere (begin <1andend>1andend <12)--2 线段的结束节点 在AB段内,而 开始节点不在此区间。or (begin>=1andend <=12 )--1 线段开始与结束节点 都在AB段内or (begin>1andbegin <=12andend>12 )--3 线段的开始节点 在AB端内 而结束节点不在此区间。or (begin <1andend>12 )-?-

3种情况吧
[/Quote]

--看你的需求了!也许按照你的意思,排除了第四种!
liuliu13654002686 2009-11-16
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 luoyoumou 的回复:]
SQL codewhere (begin<1andend>1andend<12)--2 线段的结束节点 在AB段内,而 开始节点不在此区间。or (begin>=1andend<=12 )--1 线段开始与结束节点 都在AB段内or (begin>1andbegin<=12andend>12 )--3 线段的开始节点 在AB端内 而结束节点不在此区间。or (begin<1andend>12 )-?-
[/Quote]
3种情况吧
luoyoumou 2009-11-16
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 luoyoumou 的回复:]
SQL codewhere (begin<1andend>1andend<12)--2 线段的结束节点 在AB段内,而 开始节点不在此区间。or (begin>=1andend<=12 )--1 线段开始与结束节点 都在AB段内or (begin>1andbegin<=12andend>12 )--3 线段的开始节点 在AB端内 而结束节点不在此区间。or (begin<1andend>12 )-?-
[/Quote]

--楼主:你画个图一看就清楚了!
luoyoumou 2009-11-16
  • 打赏
  • 举报
回复

where (begin <1 and end >1 and end <12) --2 线段的结束节点 在AB段内,而 开始节点不在此区间。
or (begin >=1 and end <=12 ) --1 线段开始与结束节点 都在AB段内
or (begin >1 and begin<=12 and end >12 ) --3 线段的开始节点 在AB端内 而结束节点不在此区间。
or (begin <1 and end >12 ) --4 线段AB真包含于线段开始与结束节点

--其实有四种情况:
1 线段开始与结束节点 都在AB段内。
2 线段的结束节点 在AB段内,而 开始节点不在此区间。
3 线段的开始节点 在AB端内 而结束节点不在此区间。
4 线段AB真包含于线段开始与结束节点 (如: begin <1 and end >12
--小F-- 2009-11-16
  • 打赏
  • 举报
回复
----------------------------------------------------------------
-- Author :fredrickhu(我是小F,向高手学习)
-- Date :2009-11-16 09:42:26
-- Version:
-- Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86)
-- Nov 24 2008 13:01:59
-- Copyright (c) 1988-2005 Microsoft Corporation
-- Developer Edition on Windows NT 5.2 (Build 3790: Service Pack 1)
--
----------------------------------------------------------------
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([id] int,[begin] int,[end] int)
insert [tb]
select 1,0,9 union all
select 2,9,15 union all
select 3,7,19 union all
select 4,14,20
--------------开始查询--------------------------
declare @start int,@end int
set @start=1
set @end=12
select
*
from
tb
where
id
in
(select case when ([begin] between @start and @end) or ([end] between @start and @end) then id end as id from tb)
----------------结果----------------------------
/* id begin end
----------- ----------- -----------
1 0 9
2 9 15
3 7 19

(3 行受影响)
*/
qqzeng-ip 2009-11-16
  • 打赏
  • 举报
回复
思维不错
liuliu13654002686 2009-11-16
  • 打赏
  • 举报
回复
ztgis 应该是对的 还有其他的吗?或者通过这个大家展开讨论一下 相关的问题
luoyoumou 2009-11-16
  • 打赏
  • 举报
回复
where (begin <=1 and end >1 ) 
or (begin >=1 and end <=12 )
or (begin <=12 and end >12 )
行者_ 2009-11-16
  • 打赏
  • 举报
回复

SELECT *
FROM 你的表名字
WHERE begin BETWEEN '起点' AND '终点' OR end BETWEEN '起点' AND '终点'
liuliu13654002686 2009-11-16
  • 打赏
  • 举报
回复
表里面数据假设为
id begin end
1 0 9
2 9 15
3 7 19
4 14 20
查询条件为 begin 1 end 为12
这样 前3条语句都应该包含进来
luoyoumou 2009-11-16
  • 打赏
  • 举报
回复
--怎么写啊?线段的枚举是无穷的啊!
--小F-- 2009-11-16
  • 打赏
  • 举报
回复
三种情况都是case when 结合between ...and来做
问题是最后你要的结果是什么?
--小F-- 2009-11-16
  • 打赏
  • 举报
回复
这个还讨论什么啊?最多定义两个变量 像我8楼写的那样了
liuliu13654002686 2009-11-16
  • 打赏
  • 举报
回复
高手们 还有其他方法吗 一起讨论一下 能不能扩展开阿

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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