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 ,´ / | |\
/__| `~...............................................~´ /___|/ /