Tôi đã viết một giải pháp cho vấn đề bằng cách sử dụng PL/SQL và SQL và tôi không thể không nghĩ rằng nó có thể được thực hiện 100% trong SQL nhưng tôi đang đấu tranh để bắt đầu.Giải pháp cho vấn đề được thực hiện trong PL/SQL nó sẽ trông như thế nào trong SQL?
Dưới đây là cấu trúc của hai bảng (Nếu nó giúp, các kịch bản để tạo ra chúng là ở phần cuối của câu hỏi)
Bảng t1 (khóa chính là cả hai cột hiển thị)
ID TYPE
1 A
1 B
1 C
2 A
2 B
3 B
các cột Type là một khóa ngoại đến bảng T2, trong đó có các dữ liệu sau:
bảng t2 (khóa chính là Type)
Type Desc
A xx
B xx
C xx
Vì vậy, cho các dữ liệu trong T1 kết quả tôi cần sẽ là:
Đối với ID 1 vì nó có tất cả các loại trong bảng ngoại quan trọng tôi sẽ trả lại đen "Tất cả"
Đối với ID 2 bởi vì nó có hai loại tôi muốn trở về "A B &" (lưu ý các dấu phân cách)
Và cuối cùng cho ID 3 bởi vì nó có một loại tôi muốn quay trở lại chỉ là "B"
Như đã hứa ở đây là các kịch bản để tạo tất cả các đối tượng được đề cập.
create table t2(type varchar2(1),
description varchar2(100)
)
/
insert into t2
values ('A', 'xx')
/
insert into t2
values ('B', 'xx')
/
insert into t2
values ('C', 'xx')
/
alter table t2 add constraint t2_pk primary key (type)
/
create table t1 (id number(10),
type varchar2(1)
)
/
alter table t1 add constraint t1_pk primary key(id, type)
/
alter table t1 add constraint t1_fk foreign key (type)
references t2(type)
/
insert into t1
values (1, 'A')
/
insert into t1
values (1, 'B')
/
insert into t1
values (1, 'C')
/
insert into t1
values (2, 'A')
/
insert into t1
values (2, 'B')
/
insert into t1
values (3, 'B')
/
Bạn sẽ thêm nhiều loại khác vào t2? Không chỉ A, B, và C? – mcpeterson
@mcpeterson: Cảm ơn nhận xét. Các dữ liệu trong t2 sẽ được cố định, với tổng số khoảng 5 hàng –
Sự cần thiết phải nối chuỗi nhóm theo định hướng phủ nhận khả năng thực hiện điều này trong SQL thuần túy. –