Jessica: Immer -1 als Ergebnis

Hallo,

bei folgendem Skript wird aus der Anweisung immer "-1" zurückgegeben. Was ist falsch an der Abfrage ?

my $DBH  = DBI->connect('DBI:ODBC:db1') || die "Konnte keine Verbindung zur Datenbank herstellen\n$!";
my $STH  = $DBH->prepare("SELECT Tabelle1.Kundennummer,  Tabelle2.Betrag
           FROM Tabelle1, Tabelle2 WHERE Tabelle1.Kundennummer = $Kundennummer
           AND Tabelle2.Kundennummer = $Kundennummer")
           || die "Konnte kein SQL-Statement bereitstellen\n$!";

$STH->execute()
           || die "Ausfuehren nicht moeglich\n$!";

Treffer

if ($STH->rows != 0){
...
}
else {
...
}

Gruß Jessica

  1. Hallo Jessica!

    SELECT Tabelle1.Kundennummer,  Tabelle2.Betrag
               FROM Tabelle1, Tabelle2 WHERE Tabelle1.Kundennummer = $Kundennummer
               AND Tabelle2.Kundennummer = $Kundennummer

    Warum -1 rauskommt weiß ich ehrlich gesagt auch nicht, aber verknüpfe doch mal die beiden Tabellen direkt, vielleicht bringts was.
    Also so z.B.:
    SELECT
      Tabelle1.Kundennummer,Tabelle2.Betrag
    FROM
      Tabelle1,Tabelle2
    WHERE
      Tabelle1.Kundennummer = '$Kundennummer'
      AND Tabelle2.Kundennummer = Tabelle1.Kundennummer

    Eigentlich sollte das funktionieren, meine ich ... (ich kenne natürlich dein DB-Modell nicht)

    MfG
    Götz

    --
    Losung und Lehrtext für Mittwoch, 1. Oktober 2003
    Der Herr sprach: Ich will hinfort nicht mehr die Erde verfluchen um der Menschen willen; denn das Dichten und Trachten des menschlichen Herzens ist böse von Jugend auf. (1.Mose 8,21)
    Es gibt keine Verdammnis für die, die in Christus Jesus sind. (Römer 8,1)
    (http://www.losungen.de/heute.php3)
    1. Hallo Götz!

      Tabelle1.Kundennummer = '$Kundennummer'
        AND Tabelle2.Kundennummer = Tabelle1.Kundennummer ...

      <-- das geht leider auch nicht. Habe ich bereits ausprobiert. Dann erhalte ich gar kein Ergebnis. Das Skript läuft zwar im Hintergrund aber brind kein Feedback.

      Es handelt sich um eine Access-Datenbank, in der die Tabelle 1 und Tabelle 2 miteinander verknüpft sind.

      Jessica

    2. Hallo Jessica!

      SELECT Tabelle1.Kundennummer,  Tabelle2.Betrag
                 FROM Tabelle1, Tabelle2 WHERE Tabelle1.Kundennummer = $Kundennummer
                 AND Tabelle2.Kundennummer = $Kundennummer

      Warum -1 rauskommt weiß ich ehrlich gesagt auch nicht, aber verknüpfe doch mal die beiden Tabellen direkt, vielleicht bringts was.
      Also so z.B.:
      SELECT
        Tabelle1.Kundennummer,Tabelle2.Betrag
      FROM
        Tabelle1,Tabelle2
      WHERE
        Tabelle1.Kundennummer = '$Kundennummer'
        AND Tabelle2.Kundennummer = Tabelle1.Kundennummer

      warum dann nicht
      SELECT
        Tabelle1.Kundennumer,Tabelle2.Betrag
      FROM
        Tabelle1 INNER JOIN Tabelle2 using(Kundennummer)
      WHERE
        Tabelle1.Kundennummer = $Kundennummer

      Zur Originalfrage: Wie bereits bei geantwortet wurde wurde( ?t=58924&m=331032 ), ist diese Methode nicht empfohlen. Wurde der Rückgabewert von execute() mal geprüft?

      1. Hallo Richard!

        warum dann nicht [...]

        Dürfte ja auf das selbe rauslaufen ...

        Ich hab mir das nur kurz angeschaut und das war halt meien erste Idee, eigentlich hab ich ja keine Ahnung von Perl und mit SQL hab ich auch nur bei MySQL zu tun.
        Eigentlich sollte die Abfrage aber funktionieren ... naja, wie dem auch sei.

        MfG
        Götz

        --
        Losung und Lehrtext für Mittwoch, 1. Oktober 2003
        Der Herr sprach: Ich will hinfort nicht mehr die Erde verfluchen um der Menschen willen; denn das Dichten und Trachten des menschlichen Herzens ist böse von Jugend auf. (1.Mose 8,21)
        Es gibt keine Verdammnis für die, die in Christus Jesus sind. (Römer 8,1)
        (http://www.losungen.de/heute.php3)
      2. Hallo Richard,

        SELECT
          Tabelle1.Kundennummer,Tabelle2.Betrag
        FROM
          Tabelle1,Tabelle2
        WHERE
          Tabelle1.Kundennummer = '$Kundennummer'
          AND Tabelle2.Kundennummer = Tabelle1.Kundennummer

        warum dann nicht
        SELECT
          Tabelle1.Kundennumer,Tabelle2.Betrag
        FROM
          Tabelle1 INNER JOIN Tabelle2 using(Kundennummer)
        WHERE
          Tabelle1.Kundennummer = $Kundennummer

        Was wegen dem Optimizer vom DBMS auf das gleiche hinauslaufen würde und von daher lediglich eine Frage des Geschmacks ist.

        Viele Grüße,
        Christian

  2. Hi,

    SELECT Tabelle1.Kundennummer,  Tabelle2.Betrag
    FROM Tabelle1, Tabelle2 WHERE Tabelle1.Kundennummer = $Kundennummer
    AND Tabelle2.Kundennummer = $Kundennummer

    Neben dem von Götz erwähnten mit dem Verknüpfen, hast du auch das Feld Tabelle2.Kundennummer nicht selektiert. Also:

    SELECT Tabelle1.Kundennummer, Tabelle2.Kundennummer, Tabelle3.Betrag
    FROM Tabelle1, Tabelle2
    WHERE Tabelle1.Kundennummer=$Kundennummer
    AND Tabelle1.Kundennummer=Tabelle2.Kundennummer

    HTH

    wunderwarzenschwein

    --
    ss:} zu:$ ls:} fo:| de:] va:) ch:? sh:( n4:# rl:? br:> js:| ie:( fl:{ mo:)
    1. Hi,

      SELECT Tabelle1.Kundennummer,  Tabelle2.Betrag
      FROM Tabelle1, Tabelle2 WHERE Tabelle1.Kundennummer = $Kundennummer
      AND Tabelle2.Kundennummer = $Kundennummer

      Neben dem von Götz erwähnten mit dem Verknüpfen, hast du auch das Feld Tabelle2.Kundennummer nicht selektiert. Also:

      Dir ist schon bewusst, das du in der Where-Bedingung auch Felder benutzen kannst, welche du am Schluss nicht in der Ausgabe haben willst und somit nicht nach SELECT aufführst?

      Die Angaben nach dem SELECT sagen nur etwas darüber aus, welche Felder als Resultat gewünscht werden sonst haben sie für die WHERE-Bedingung keinerlei Bedeutung (je nach DBMS wohl aber für GROUP BY, HAVING und ORDER BY).

      Gruss Daniela