Immer -1 als Ergebnis
Jessica
- perl
0 Götz0 Jessica0 Richard Voß0 Götz0 Christian Seiler
0 wunderwarzenschwein
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$!";
if ($STH->rows != 0){
...
}
else {
...
}
Gruß Jessica
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
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
Hallo Jessica!
SELECT Tabelle1.Kundennummer, Tabelle2.Betrag
FROM Tabelle1, Tabelle2 WHERE Tabelle1.Kundennummer = $Kundennummer
AND Tabelle2.Kundennummer = $KundennummerWarum -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?
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
Hallo Richard,
SELECT
Tabelle1.Kundennummer,Tabelle2.Betrag
FROM
Tabelle1,Tabelle2
WHERE
Tabelle1.Kundennummer = '$Kundennummer'
AND Tabelle2.Kundennummer = Tabelle1.Kundennummerwarum 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
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
Hi,
SELECT Tabelle1.Kundennummer, Tabelle2.Betrag
FROM Tabelle1, Tabelle2 WHERE Tabelle1.Kundennummer = $Kundennummer
AND Tabelle2.Kundennummer = $KundennummerNeben 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