SQL选择带有视图的记录

时间:2015-03-22 10:51:14

标签: sql

如何解决这个问题?

我有一个表A,B,C和C

视图
  • 表A具有a1,a2,a3等
  • 表C具有c1,c2,c3等。

表B

(a1,c1)
(a1,c4)
(a1,c3)
(a2,c1)
(a2,c3)
(a2,c4)
(a3,c1)
(a3,c4)
(a4,c1)
(a4,c4)
(a4,c3)
(a4,c5)

示例:

我使用c1,c3,c4

查看C.

结果应为:a1,a2,a4

或者:

查看C:c1,c5

结果应为:a4

我希望表B中的所有元素(aX)都包含视图C中的所有元素。

1 个答案:

答案 0 :(得分:1)

你可以这样做:

create table temp_a (
  a_rec varchar2(2)
);

create table temp_b (
  a_rec varchar2(2),
  c_rec varchar2(2)
);

create table temp_c (
  c_rec varchar2(2)
);

insert into temp_a values ('a1');
insert into temp_a values ('a2');
insert into temp_a values ('a3');
insert into temp_a values ('a4');

insert into temp_c values ('c1');
insert into temp_c values ('c3');
insert into temp_c values ('c4');

insert into temp_b values ('a1','c1');
insert into temp_b values ('a1','c4');
insert into temp_b values ('a1','c3');
insert into temp_b values ('a2','c1');
insert into temp_b values ('a2','c3');
insert into temp_b values ('a2','c4');
insert into temp_b values ('a3','c1');
insert into temp_b values ('a3','c4');
insert into temp_b values ('a4','c1');
insert into temp_b values ('a4','c4');
insert into temp_b values ('a4','c3');
insert into temp_b values ('a4','c5');

select b.a_rec
from temp_b b 
join temp_c c on c.c_rec = b.c_rec
group by a_rec
having count(*) >= (select count(c_rec) from temp_c);

请注意,如果您使用c1,c3,c4查看C,那么结果实际上是:a1,a2,a4(因为a1也符合条件)。