Announcement

Collapse
No announcement yet.

Subselect in From

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Subselect in From

    Hallo,

    ich stehe wieder einmal vor einem Problem und hoffe auf die Hilfe hier im Forum.

    Ich habe eine Tabelle mit Angeboten und eine mit Adressen, wobei zu einem Angeot mehrere Adressen möglich sind. Aus diesen Adressen soll eine bestimmte Adresse, entweder sie ist Aktiv oder nach dem letzten Datum selektiert werden.

    SELECT test_angebot.*,
    s.adresse

    FROM test_angebot,
    ( SELECT adresse
    FROM ( SELECT test_adresse.*,
    ROW_NUMBER() OVER ( ORDER BY pid ) rno
    FROM test_adresse
    WHERE test_adresse.pid = 1
    ORDER BY aktiv DESC, datum DESC )
    WHERE rno = 1 ) s
    WHERE test_angebot.id = 2
    Soweit komme ich, allerdings kann ich das "WHERE test_adresse.pid = 1" aus dem Subselect nicht im WHERE von test_angebot verwenden


    SELECT test_angebot.*,
    s.adresse

    FROM test_angebot,
    ( SELECT adresse
    FROM ( SELECT test_adresse.*,
    ROW_NUMBER() OVER ( ORDER BY pid ) rno
    FROM test_adresse
    ORDER BY aktiv DESC, datum DESC )
    WHERE rno = 1 ) s
    WHERE test_angebot.id = 2
    AND s.pid = test_angebot.pid
    Der Fehler lautet: s.pid ungültiger bezeichner

    drop table IBISAdm.test_angebot cascade constraints;

    /*================================================= =============*/
    /* Table: test_angebot */
    /*================================================= =============*/
    create table IBISAdm.test_angebot
    (
    id NUMBER,
    pid NUMBER,
    preis DECIMAL(10, 2)
    );

    INSERT INTO test_angebot (ID,PID,PREIS)
    VALUES(1,1,10000);
    INSERT INTO test_angebot (ID,PID,PREIS)
    VALUES(2,1,12000);
    INSERT INTO test_angebot (ID,PID,PREIS)
    VALUES(3,2,15000);

    create table IBISAdm.test_adresse
    (
    id NUMBER,
    pid NUMBER,
    adresse VARCHAR2(30),
    aktiv INT,
    datum DATE
    );

    INSERT INTO test_adresse (ID,ADRESSE,AKTIV,DATUM,PID)
    VALUES(1,'adresse 1',0,TO_DATE('23.02.2015','DD/MM/RRRR'),1);
    INSERT INTO test_adresse (ID,ADRESSE,AKTIV,DATUM,PID)
    VALUES(2,'adresse 2',1,TO_DATE('4.02.2015','DD/MM/RRRR'),1);
    INSERT INTO test_adresse (ID,ADRESSE,AKTIV,DATUM,PID)
    VALUES(3,'adresse 3',0,TO_DATE('10.03.2015','DD/MM/RRRR'),1);
    INSERT INTO test_adresse (ID,ADRESSE,AKTIV,DATUM,PID)
    VALUES(4,'adresse 1',1,TO_DATE('24.02.2015','DD/MM/RRRR'),2);
    INSERT INTO test_adresse (ID,ADRESSE,AKTIV,DATUM,PID)
    VALUES(5,'adresse 1',0,TO_DATE('2.03.2015','DD/MM/RRRR'),3);

    COMMIT;
    Danke
    Urwi

  • #2
    Du hast pid nicht im select statement von alias S drin.
    So sollte es gehen
    [highlight=sql]
    SELECT test_angebot.*, s.adresse
    FROM test_angebot,
    (SELECT adresse, pid/*!*/
    FROM (SELECT test_adresse.*, ROW_NUMBER() OVER(ORDER BY pid) rno
    FROM test_adresse
    ORDER BY aktiv DESC, datum DESC)
    WHERE rno = 1) s
    WHERE test_angebot.id = 2
    AND s.pid = test_angebot.pid
    [/highlight]
    Gruß, defo

    Comment


    • #3
      Danke!

      Urwi

      Comment

      Working...
      X