一个按字段顺序对比内容的问题

maple604 2013-07-20 02:37:10
遇到个问题,向大家请教,表的结构如下

id name
1 lily
1 tom
1 john
2 lily
2 tom
2 john
... ...
... ...
n lily
n tom
n john

现在要判断所有id的对应的name必须都含有lily tom john,并且顺序必须为lily tom john
我自己的办法是 select name from students where id = 1
把id为1的名字都取出来,依次和lily tom john 做比较。
这样就得写n条类似select name from students where id = 1 的sql语句(因为student中有n个不同的id)


想跟大家请教下怎么样可以用一条sql解决这个问题。

...全文
90 6 点赞 打赏 收藏 举报
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
陈字文 2013-07-21
引用 楼主 maple604 的回复:
遇到个问题,向大家请教,表的结构如下 id name 1 lily 1 tom 1 john 2 lily 2 tom 2 john ... ... ... ... n lily n tom n john 现在要判断所有id的对应的name必须都含有lily tom john,并且顺序必须为lily tom john 我自己的办法是 select name from students where id = 1 把id为1的名字都取出来,依次和lily tom john 做比较。 这样就得写n条类似select name from students where id = 1 的sql语句(因为student中有n个不同的id) 想跟大家请教下怎么样可以用一条sql解决这个问题。
你看到数据的顺序,与数据库保存数据的顺序必须是不一致的,所以,必须有一个辅助字段可以作为排序的依据. 可以使用WMSYS.WM_CONCAT函数来形成结果集,然后使用lily tom john 进行筛选. WMSYS.WM_CONCAT(name) = 'lily,tom,john'
  • 打赏
  • 举报
回复
shy315 2013-07-20
由于现有数据无序,估计很难准确实现。 或者假定目前都正确,即sequence=0的,必须对应lily,sequence=1 对应tom sequence为2的对应john 或者先按照rownum或rowid新增顺序列,然后处理成0 1 2
  • 打赏
  • 举报
回复
maple604 2013-07-20
没具体明白zhaoxiangchong 的意思
  • 打赏
  • 举报
回复
maple604 2013-07-20
谢谢楼上两位 我有个想法是为students加一个新字段叫sequence id name sequence 1 lily 0 1 tom 1 1 john 2 2 lily 0 2 tom 1 2 john 2 ... ... ... ... n lily 0 n tom 1 n john 2 类似这样,然后可以判断sequence=0的,必须对应lily,sequence=1 对应tom sequence为2的对应john。 但是我该怎么能把我原来的表加上这么一列呢,请大家赐教啊。 加上后,我可以这么写sql就能找出错误的了。 select * from students where sequence =0 and name!=lily.
  • 打赏
  • 举报
回复
善若止水 2013-07-20
楼主需要再建一张新表,两字段,姓名和排序编号。 然后原表和进行关联,三个条件都能关联上证明是满足条件的。排序用新表的编号
  • 打赏
  • 举报
回复
shy315 2013-07-20
顺序必须为lily tom john,必须要有排序字段,即order by xxx,否则每次顺序不稳定。 另外,一句sql怎样作判断,太不明确了,最好举例说明想得到的结果。
  • 打赏
  • 举报
回复
相关推荐
发帖
Oracle
创建于2007-09-28

1.6w+

社区成员

Oracle开发相关技术讨论
申请成为版主
帖子事件
创建了帖子
2013-07-20 02:37
社区公告
暂无公告