Bestimmte Werte selektieren

Kathi14

Benutzer
Beiträge
12
Hallo zusammen,

ich habe zwei Tabellen:

A
id
aa
bbb
cc
ccc
dd
ddd
ee
eee

B
id

dd
eee

und ich möchte folgende Werde bekommen:
aa
bbb
ccc
dd
eee

Mit meinem select bekomme ich die Werte: aa, bbb, ccc, dd, ddd, ee, eee. Wie soll ich aber ddd und ee rausfiltern?

select case when MIN (a.id) <> MAX (a.id) then MAX (a,id)
else MIN (a.id)
end id_neu
, nvl(b.id, -1)
FROM a
, b
where a.id = b.id (+)
group by nvl(b.id, -1)
order by 1

Vielen Dank für eure Hilfe!

Grüße,
Kathi
 
Werbung:
:( Entschuldige

Es sind also zwei Tabellen mit den Strings:

Tabelle A:
Spalte: id
  • aa
  • bbb
  • cc (Substring von ccc)
  • ccc
  • dd (Substring von ddd)
  • ddd
  • ee (Substring von eee)
  • eee


Tabelle B:
Spalte: id
  • dd
  • eee

Ich brauche von der Tabelle A die Strings, die in der Tabelle B nicht vorhanden sind: also aa und bbb. Wenn es aber in der Tabelle A ein String und sein Substring gibt (wie: cc - ccc), soll den String ccc ausgegeben werden. Außerdem brauche ich von der A die Werte, die auch in der Tabelle B sind (den Substring dd und den String eee).


Mit meinem select bekomme ich die Werte: aa, bbb, ccc. Das ist schon mal richtig. Aber ich bekomme auch die: dd, ddd, ee, eee. und ich weiss nicht, wie ich ddd und ee rausfiltern soll. Ich habe die max(), min() benutzt, wegen Strings und Substrings. Kann ich die Ausgabe anders lösen?
Code:
select case when MIN (A.id) <> MAX (A.id) then MAX (A,id)
else MIN (A.id)
end id_neu
, NVL(B.id, -1) 
FROM A
, left outer join
on A.id = B.id 
group by NVL(B.id, -1)

Grüße,
Kathi
 
Ich brauche von der Tabelle A die Strings, die in der Tabelle B nicht vorhanden sind. ... Außerdem brauche ich von der A die Werte, die auch in der Tabelle B sind.

Parse Eroor.

Ist das ein reales Problem oder was vereinfachtes?

Deine Substring-Problematik kannst vielleicht so lösen:

Code:
test=*# select t from (select a.*, case when t = substring(lag(a.t) over (order by a.t desc),1,length(a.t)) then 0 else 1 end cfrom kathi_a a order by a.t ) x where c = 1;
  t
-----
 aa
 bbb
 ccc
 ddd
 eee
(5 rows)

Wobei sich mir hier insgesamt die Frage stellt: Ist das Kunst oder kann das weg?
 
Es ist reales Problem...
und ich bin noch relativ neu im sql-Welt.

Die Lösung hätte perfekt geklappt, vielen Dank, aber es gibt da einen Hacken, ich brauche in einem Fall den Substring nämlich statt ddd - dd (wegen der Abhängigkeit von der Tabelle B).
Also:
aa
bbb
ccc
dd
eee
 
Es ist reales Problem...
und ich bin noch relativ neu im sql-Welt.

Die Lösung hätte perfekt geklappt, vielen Dank, aber es gibt da einen Hacken, ich brauche in einem Fall den Substring nämlich statt ddd - dd (wegen der Abhängigkeit von der Tabelle B).
Also:
aa
bbb
ccc
dd
eee

Weil du es bist ;-)

Code:
test=*# select case when foo.t ~ b.t then b.t else foo.t end from (select t from (select a.*, case when t = substring(lag(a.t) over (order by a.t desc),1,length(a.t)) then 0 else 1 end c from kathi_a a order by a.t ) x where c = 1) foo left join kathi_b bon foo.t ~ b.t;
  t
-----
 aa
 bbb
 ccc
 dd
 eee
(5 rows)
 
Werbung:
Zurück
Oben