Làm cách nào để tham chiếu cột bên ngoài truy vấn phụ bằng Oracle? Tôi đặc biệt cần sử dụng nó trong câu lệnh WHERE của truy vấn phụ.Cột truy vấn cha tham chiếu trong truy vấn phụ (Oracle)
Về cơ bản tôi có điều này:
SELECT Item.ItemNo, Item.Group
FROM Item
LEFT OUTER JOIN (SELECT Attribute.Group, COUNT(1) CT
FROM Attribute
WHERE Attribute.ItemNo=12345) A ON A.Group = Item.Group
WHERE Item.ItemNo=12345
Tôi muốn thay đổi WHERE Attribute.ItemNo=12345
để WHERE Attribute.ItemNo=Item.ItemNo
trong subquery, nhưng tôi không thể tìm ra nếu điều này là có thể. Tôi tiếp tục nhận được "ORA-00.904: 'mục' 'ItemNo':. Không hợp lệ Identifier"
EDIT:
Ok, đây là lý do tại sao tôi cần phải loại cấu trúc:
Tôi muốn có thể nhận được tổng số bản ghi "Lỗi" (trong đó mục thiếu giá trị) và bản ghi "OK" (trong đó mục có giá trị).
Cách tôi đã thiết lập trong fiddle trả về dữ liệu chính xác. Tôi nghĩ rằng tôi có thể chỉ cần điền vào giá trị trong mỗi truy vấn phụ, vì điều này có lẽ sẽ là cách dễ nhất. Xin lỗi nếu cấu trúc dữ liệu của tôi hơi phức tạp. Tôi có thể giải thích nếu cần thiết.
bảng của tôi là:
create table itemcountry(
itemno number,
country nchar(3),
imgroup varchar2(10),
imtariff varchar2(20),
exgroup varchar2(10),
extariff varchar2(20));
create table itemattribute(
attributeid varchar2(10),
tariffgroup varchar2(10),
tariffno varchar2(10));
create table icav(
itemno number,
attributeid varchar2(10),
value varchar2(10));
và truy vấn của tôi cho đến nay là:
select itemno, country, imgroup, imtariff, im.error "imerror", im.ok "imok", exgroup, extariff, ex.error "exerror", ex.ok "exok"
from itemcountry
left outer join (select sum(case when icav.itemno is null then 1 else 0 end) error, sum(case when icav.itemno is not null then 1 else 0 end) ok, tariffgroup, tariffno
from itemattribute ia
left outer join icav on ia.attributeid=icav.attributeid
where (icav.itemno=12345 or icav.itemno is null)
group by tariffgroup, tariffno) im on im.tariffgroup=imgroup and imtariff=im.tariffno
left outer join (select sum(case when icav.itemno is null then 1 else 0 end) error, sum(case when icav.itemno is not null then 1 else 0 end) ok, tariffgroup, tariffno
from itemattribute ia
left outer join icav on ia.attributeid=icav.attributeid
where (icav.itemno=12345 or icav.itemno is null)
group by tariffgroup, tariffno) ex on ex.tariffgroup=exgroup and extariff=ex.tariffno
where itemno=12345;
Nó cũng đã được thiết lập trong một SQL Fiddle.
bạn không thể .. bạn muốn chọn gì? có thể có một giải pháp khác ngoài tham gia bên ngoài bên trái. – hkutluay
xem sqlfiddle – tedski