Jak mogę odwołać się do kolumny poza podzapytaniem przy użyciu Oracle? Muszę go użyć w instrukcji WHERE podzapytania.Referencyjna kolumna nadrzędnego zapytania w podzapytanie (Oracle)
Zasadniczo mam to:
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
Chciałbym zmienić WHERE Attribute.ItemNo=12345
do WHERE Attribute.ItemNo=Item.ItemNo
w podzapytania, ale nie mogę dowiedzieć się, czy jest to możliwe. Wciąż otrzymuję "ORA-00904: 'produkt' 'ItemNo'. Nieprawidłowy identyfikator"
EDIT:
Ok, to dlaczego muszę tego rodzaju konstrukcji:
chcę być w stanie uzyskać liczbę rekordów "Błąd" (gdy elementowi brakuje wartości) i zapisy "OK" (gdzie pozycja ma wartość).
Sposób, w jaki ustawiłem go w skrzypcach, zwraca poprawne dane. Myślę, że mógłbym właśnie zakończyć wypełnianie wartości w każdym z podzapytań, ponieważ prawdopodobnie byłby to najprostszy sposób. Przepraszam, jeśli moje struktury danych są trochę zawiłe. Mogę wyjaśnić, jeśli zajdzie taka potrzeba.
Moje tabele są:
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));
i moje zapytanie tak daleko jest:
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;
Jest również skonfigurować w SQL Fiddle.
Nie możesz .. co chcesz wybrać? może mieć inne rozwiązanie niż lewe sprzężenie zewnętrzne. – hkutluay
zobacz sqlfiddle – tedski