当前位置: 代码迷 >> Oracle技术 >> oralce中实现类似many in many的语句解决思路
  详细解决方案

oralce中实现类似many in many的语句解决思路

热度:110   发布时间:2016-04-24 08:33:44.0
oralce中实现类似many in many的语句
有如下一种需求,这种需求很常见。
如一个班级(a)里有许多学生(b),现在的需求是 查询出 即有名叫张三,又有名叫李四(条件数不定,可能更多名字)的班级。

伪代码,就类似于
select a.id from a where (:名字列表) in a.bList.name
就是在a的学生里,即有名字一,又有名字二,又有名字三...

这种需求,使用oracle如何实现,如果是其它数据库呢。
谢谢:)

------解决方案--------------------
实测数据:
SQL code
CREATE TABLE Classes(    ID VARCHAR2(20),    NAME VARCHAR2(20));INSERT INTO Classes VALUES('0101', '1年1班');INSERT INTO Classes VALUES('0102', '1年2班');INSERT INTO Classes VALUES('0201', '2年1班');INSERT INTO Classes VALUES('0202', '2年2班');CREATE TABLE Student(    ID VARCHAR2(20),    ClassID VARCHAR2(20),    NAME VARCHAR2(20));-- 1年1班INSERT INTO Student VALUES('010101', '0101', '张三');INSERT INTO Student VALUES('010102', '0101', '李四');-- 1年2班INSERT INTO Student VALUES('010201', '0102', '张三');INSERT INTO Student VALUES('010202', '0102', '王五');
------解决方案--------------------
--借用下表结构 :)
CREATE TABLE Student
(
ID VARCHAR2(20),
ClassID VARCHAR2(20),
NAME VARCHAR2(20)
);

-- 1年1班
INSERT INTO Student VALUES('010101', '0101', 'a');
INSERT INTO Student VALUES('010102', '0101', 'b');
-- 1年2班
INSERT INTO Student VALUES('010201', '0102', 'a');
INSERT INTO Student VALUES('010202', '0102', 'c');

select t.classid
from Student t
 where t.name in ('a', 'b')
 group by t.classid
having count(distinct t.name) = 2

像这种情况一般是在过程中使用。所以传入的'a', 'b'应该是个字符窜'a,b'
通过length(窜'a,b') - length(replace(窜'a,b', ',', '')) + 1
可以计算出窜'a,b'中姓名的个数。
  相关解决方案