Mysql4.0 Delete in erster table wenn in zweiter kein Eintrag
Mysql4.0 Delete in erster table wenn in zweiter kein Eintrag
am 08.12.2006 22:39:07 von Thomas B
Hallo zusammen
Steht schon wieder gründlich auf dem Schlauch...
Habe zwei tabellen
table1
AttID Beschreibung
1 Kaninchen
2 Hund
4 Affe
5 Maus
6 Katze
7 Fisch
table2
AttID HalterID
1 Bert
6 Bert
6 Anton
2 Fritz
Ich möchte nun alle Haustiere aus table1 löschen welche nicht mehr
benötigt werden, sprich nirgends in table2 sind. Bin jetzt schon
stundenlang am rumprobieren aber ich kriegs einfach nicht hin..
thanx
inc.
Re: Mysql4.0 Delete in erster table wenn in zweiter kein Eintrag
am 08.12.2006 22:57:20 von Johannes Vogel
Hi Unbekannter
incogni@gmx.de wrote:
^-- Bitte Realnamen einsetzen
> Ich möchte nun alle Haustiere aus table1 löschen welche nicht mehr
> benötigt werden, sprich nirgends in table2 sind. Bin jetzt schon
> stundenlang am rumprobieren aber ich kriegs einfach nicht hin..
Aus: 13.2.1. DELETE Syntax
http://dev.mysql.com/doc/refman/5.0/en/delete.html
| Posted by Urko Benito on October 10 2006 3:33pm
| Yo can delete the rows from one table (t1) not joined to the rows of
| other table (t2) his way:
| DELETE FROM t1 USING t1 LEFT JOIN t2 ON t1.id=t2.parent
| WHERE t2.id IS NULL
HTH, Johannes
Re: Mysql4.0 Delete in erster table wenn in zweiter kein Eintrag
am 09.12.2006 01:33:15 von Thomas B
> Aus: 13.2.1. DELETE Syntax
> http://dev.mysql.com/doc/refman/5.0/en/delete.html
>
> | Posted by Urko Benito on October 10 2006 3:33pm
> | Yo can delete the rows from one table (t1) not joined to the rows of
> | other table (t2) his way:
> | DELETE FROM t1 USING t1 LEFT JOIN t2 ON t1.id=3Dt2.parent
> | WHERE t2.id IS NULL
>
> HTH, Johannes
Hallo Johannes
Habe das Profil gefunden bzw. eingetragen..mal sehen obs klappt
Was "heisst" das t2.parent ?
In meinem Beispiel müsste es dann heissen:
DELETE FROM table1 USING table1 LEFT JOIN table2 ON
table1.AttID=3Dtable2.AttID
WHERE table2.AttID IS NULL
Klappt aber leider nicht..
Gruss
Thomas
Re: Mysql4.0 Delete in erster table wenn in zweiter kein Eintrag
am 09.12.2006 02:02:18 von Johannes Vogel
Hi unbekannter Thomas
incogni@gmx.de wrote:
>> Aus: 13.2.1. DELETE Syntax
>> http://dev.mysql.com/doc/refman/5.0/en/delete.html
>> | Posted by Urko Benito on October 10 2006 3:33pm
>> | Yo can delete the rows from one table (t1) not joined to the rows of
>> | other table (t2) his way:
>> | DELETE FROM t1 USING t1 LEFT JOIN t2 ON t1.id=t2.parent
>> | WHERE t2.id IS NULL
> Habe das Profil gefunden bzw. eingetragen..mal sehen obs klappt
Nein, hat nicht geklappt.
> Was "heisst" das t2.parent ?
> In meinem Beispiel müsste es dann heissen:
> DELETE FROM table1 USING table1 LEFT JOIN table2 ON
> table1.AttID=table2.AttID
> WHERE table2.AttID IS NULL
> Klappt aber leider nicht..
Was heisst 'Klappt aber leider nicht..'?
Fehlermeldung? Verhalten? Sicher, dass es überhaupt welche gibt?
Was sagt `select count(*) from table1 t1 left join table2 t2 on
t1.attid=t2.attid where t2.attid is null`?
HTH Johannes
Re: Mysql4.0 Delete in erster table wenn in zweiter kein Eintrag
am 09.12.2006 02:21:54 von Thomas B
> Aus: 13.2.1. DELETE Syntax
> http://dev.mysql.com/doc/refman/5.0/en/delete.html
>
> | Posted by Urko Benito on October 10 2006 3:33pm
> | Yo can delete the rows from one table (t1) not joined to the rows of
> | other table (t2) his way:
> | DELETE FROM t1 USING t1 LEFT JOIN t2 ON t1.id=3Dt2.parent
> | WHERE t2.id IS NULL
>
> HTH, Johannes
Hallo Johannes
Habe das Profil gefunden bzw. eingetragen..mal sehen obs klappt
Was "heisst" das t2.parent ?
In meinem Beispiel müsste es dann heissen:
DELETE FROM table1 USING table1 LEFT JOIN table2 ON
table1.AttID=3Dtable2.AttID
WHERE table2.AttID IS NULL
Klappt aber leider nicht..
Gruss
Thomas
Re: Mysql4.0 Delete in erster table wenn in zweiter kein Eintrag
am 09.12.2006 02:40:27 von Thomas Rachel
incogni@gmx.de wrote:
> In meinem Beispiel müsste es dann heissen:
> DELETE FROM table1 USING table1 LEFT JOIN table2 ON
> table1.AttID=table2.AttID
> WHERE table2.AttID IS NULL
Vermutlich. Nur ist mir diese "DELETE FROM ... USING ..."-Syntax neu; ich
kannte bislang nur "DELETE ... FROM ...". Kann sein, daà das in 5.0 neu
ist; von daher solltest Du mal diese Syntaxvariante probieren (steht
auch auf der von Johannes genannten Seite als erste "Multiple-table
syntax").
Thomas
--
Jabber-ID: glglgl@amessage.info (keine Email-Adresse!)
Warum Jabber, was ist das und wie geht das?
http://de.wikibooks.org/wiki/Jabber-Kompendium:_Schnelleinst ieg
Re: Mysql4.0 Delete in erster table wenn in zweiter kein Eintrag
am 09.12.2006 02:47:40 von Thomas B
> > Habe das Profil gefunden bzw. eingetragen..mal sehen obs klappt
>
> Nein, hat nicht geklappt.
>
ich komm nur über google rein..und da scheint es wohl ein problem zu
geben.
gibts da eine bessere variante?
>
> Was heisst 'Klappt aber leider nicht..'?
> Fehlermeldung? Verhalten? Sicher, dass es überhaupt welche gibt?
> Was sagt `select count(*) from table1 t1 left join table2 t2 on
> t1.attid=3Dt2.attid where t2.attid is null`?
>
> HTH Johannes
Datensätze vorher 1112
Datensätze nachher 991
Hab jetzt gemerkt, dass datensätze gelöscht werden..aber dachte es
funktioniert nicht,
da ich immer einen:
mysql_affected_rows(): supplied argument is not a valid MySQL-Link
resource
bekommen habe...
weiss nicht ob du eine ahnung von php hast..hier der code:
$item_del =3D mysql_query("
DELETE FROM DistanceAtt
USING DistanceAtt LEFT JOIN Distance
ON DistanceAtt.DistanceAttID=3DDistance.DistanceAttID
WHERE Distance.DistanceAttID IS NULL
");
echo 'Distanzen: '.mysql_affected_rows($item_del).' geloescht';
so wies aussieht muss ich nun einen select count() vorschieben, nach
dem delete wieder
einen select count(), und dann noch subtrahieren damit ich die anzahl
gelöschter items bekomme...uhhh
Gruss
Thomas
Re: Mysql4.0 Delete in erster table wenn in zweiter kein Eintrag
am 09.12.2006 05:42:27 von Norbert Melzer
Am 8 Dec 2006 17:47:40 -0800 schrieb incogni@gmx.de:
> Hab jetzt gemerkt, dass datensätze gelöscht werden..aber dachte es
> funktioniert nicht,
> da ich immer einen:
> mysql_affected_rows(): supplied argument is not a valid MySQL-Link
> resource
> bekommen habe...
>
> weiss nicht ob du eine ahnung von php hast..hier der code:
>
> $item_del = mysql_query("
> DELETE FROM DistanceAtt
> USING DistanceAtt LEFT JOIN Distance
> ON DistanceAtt.DistanceAttID=Distance.DistanceAttID
> WHERE Distance.DistanceAttID IS NULL
> ");
> echo 'Distanzen: '.mysql_affected_rows($item_del).' geloescht';
Normalerweise wirst Du hier für PHP geschlagen, denn für Datenbanken mit
PHP gibt es , deswegen auch XPost und FUp
dorthin.
Dein Problem ist, daß affected_rows eine Mysql Resource verlangt also
das ergebniss vom connect, nicht den des Querys[1].
HTH
Norbert
Fußnoten:
[1] steht auf
extra noch mal zum Nachlesen
Re: Mysql4.0 Delete in erster table wenn in zweiter kein Eintrag
am 09.12.2006 05:42:27 von Norbert Melzer
Am 8 Dec 2006 17:47:40 -0800 schrieb incogni@gmx.de:
> Hab jetzt gemerkt, dass datensätze gelöscht werden..aber dachte es
> funktioniert nicht,
> da ich immer einen:
> mysql_affected_rows(): supplied argument is not a valid MySQL-Link
> resource
> bekommen habe...
>
> weiss nicht ob du eine ahnung von php hast..hier der code:
>
> $item_del = mysql_query("
> DELETE FROM DistanceAtt
> USING DistanceAtt LEFT JOIN Distance
> ON DistanceAtt.DistanceAttID=Distance.DistanceAttID
> WHERE Distance.DistanceAttID IS NULL
> ");
> echo 'Distanzen: '.mysql_affected_rows($item_del).' geloescht';
Normalerweise wirst Du hier für PHP geschlagen, denn für Datenbanken mit
PHP gibt es , deswegen auch XPost und FUp
dorthin.
Dein Problem ist, daß affected_rows eine Mysql Resource verlangt also
das ergebniss vom connect, nicht den des Querys[1].
HTH
Norbert
Fußnoten:
[1] steht auf
extra noch mal zum Nachlesen
Re: Mysql4.0 Delete in erster table wenn in zweiter kein Eintrag
am 09.12.2006 09:41:10 von Claus Reibenstein
Johannes Vogel schrieb:
> incogni@gmx.de wrote:
¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Realname wäre nett ...
>> In meinem Beispiel müsste es dann heissen:
>> DELETE FROM table1 USING table1 LEFT JOIN table2 ON
>> table1.AttID=table2.AttID
>> WHERE table2.AttID IS NULL
USING kennt meine DB in diesem Zusammenhang noch nicht.
Ich würde es einfach mal so probieren:
DELETE FROM table1 LEFT JOIN table2 USING (AttID)
WHERE table2.AttID IS NULL;
>> Klappt aber leider nicht..
Sehr ausführliche Fehlerbeschreibung ...
Gruß. Claus
--
,~°O O
O ,´ / |/|\
/ |¯`. Das neue Hochzeits-Branchenbuch im Internet ,´ / | |\
/__| `~...............................................~´ /___|/ /