[C] Frage zu Vergleichsfunktion

Buba235 hat gesagt.:
Das Problem ist nur, so gehts nicht, weil da kommt der Fehler dass "PACKET_ID im WHERE Clause zweideutig" wäre. Klar auch, weil ich ja keine PACKET_ID angebe.
Nein, das ist nicht der Grund. PACKET_ID ist zweideutig weil die Tabellen "tabelle" und "t2" beide eine Spalte namens "PACKET_ID" besitzen. Du mußt angeben welche PACKET_ID von welcher Tabelle du meinst:
SQL:
... WHERE tabelle.PACKET_ID = t2.PACKET_ID AND ...
Gruß
 
Stimmt so gehts! Zumindest kommt kein Fehler mehr - Danke!
Jetzt versuch ich das ganze in die DB einzu tragen und zwar so:

Code:
UPDATE tabelle SET ID_LINK = 
SELECT t2.PACKET_ID FROM tabelle, (SELECT TIMESTAMP, PACKEST_ID 
FROM tabelle WHERE SRC_IP IN (SELECT DST_IP FROM tabelle WHERE PACKET_ID))
AS t2 WHERE tabelle.PACKET_ID = PACKET_ID AND 
abs(unix_timestamp(tabelle.TIMESTAMP) - unix_timestamp(t2.TIMESTAMP)) < 300;

Nur das scheint nicht zu gehen! Auch nicht wenn ich nach dem "=" alles andere in Klammern setze! Wie lautete das denn richtig?
 
Also erstmal mußt du die Sub Query nach dem = Zeichen in Klammern setzen.

Dann darf das Ergebnis dieses Sub-Queries aber immer nur aus einer Zeile bestehen. Da die PACKET_ID im gesamten Result-Set eindeutig sein sollte, dürfte es reichen wenn du mit
SQL:
SELECT DISTINCT ...
arbeitest.

Kriegst du denn keine Fehlermeldung? Die Beschreibung "es funktioniert nicht" ist irgendwie meist nicht sehr aufschlussreich.

Gruß

PS: Langsam krieg ich aber ein schlechtes Gewissen, das wir hier SQL Themen im C/C++ Forum diskutieren. :offtopic:
 
Hallo!

Also sorry wegen dem Offtopic! Also ich hab ne Fehlermeldung:

You can`t specify target table 'tabelle' for update in FROM clause

Das ist die Fehlermeldung bei diesem Befehl:

Code:
UPDATE tabelle SET ID_LINK = 
(SELECT t2.PACKET_ID FROM tabelle, (SELECT TIMESTAMP, PACKEST_ID 
FROM tabelle WHERE SRC_IP IN (SELECT DST_IP FROM tabelle WHERE PACKET_ID))
AS t2 WHERE tabelle.PACKET_ID = PACKET_ID AND 
abs(unix_timestamp(tabelle.TIMESTAMP) - unix_timestamp(t2.TIMESTAMP)) < 300);

Aber auch bei diesem mit DISTINCT:

Code:
UPDATE tabelle SET ID_LINK = 
(SELECT t2.PACKET_ID FROM tabelle, (SELECT DISTINCT TIMESTAMP, PACKEST_ID 
FROM tabelle WHERE SRC_IP IN (SELECT DISTINCT DST_IP FROM tabelle WHERE PACKET_ID))
AS t2 WHERE tabelle.PACKET_ID = PACKET_ID AND 
abs(unix_timestamp(tabelle.TIMESTAMP) - unix_timestamp(t2.TIMESTAMP)) < 300);
 
Hallo,

die Fehlermeldung rührt daher da man die Table tabelle1 nicht gleichzeitig als
Target des Update Befehls und in der FROM Klausel des zugehörigen Subquerys
verwenden darf...
Bin leider nicht sooo fit in Datenbanken deshalb würde ich folgendes Vorschlagen:
Führ den SELECT query einzeln aus. Iteriere im Programm über das Resultat und
mach in der Iteration dann den update Befehl.

Für künftige SQL Fragen kann man dir da glaube besser weiterhelfen:
http://www.tutorials.de/forum/relationale-datenbanken-sql-mysql-oracle-mssql/


Gruß,

RedWing
 
Hab grad den Beitrag im andren Forum grad gelesen...

Hast dus denn vorher schonmal mit dem Vorschlag probiert deinen Update SQL
Befehl in 2 Befehle (erst Select dann Update) programmseitig aufzuspalten?

RedWing hat gesagt.:
Bin leider nicht sooo fit in Datenbanken deshalb würde ich folgendes Vorschlagen:
Führ den SELECT query einzeln aus. Iteriere im Programm über das Resultat und
mach in der Iteration dann den update Befehl.

Nur so als Idee...

Gruß,

RedWing
 
Ich bin gerade drüber, aber ich hab nicht so viel Erfolg wie es aussieht. Sollte ich es aber schaffen, dann werd ich den Thread im SQL-Forum schliessen.
 
Zurück