2016-05-24 12 views
1

vielleicht kann mir jemand helfen.sql löschen mit wählen bedingt

Ich habe 2 SQL-Tabellen:

// groups 
| id_group | namegroup | 
+------------+-----------+ 
| 30   | s   | 


// contacts 
| name | group | 
+------+-------+ 
| juan | s  | 

Ich brauche eine Gruppe von ID zu löschen, aber keine hat Kontakte mit ihm verbunden ist. Ich teste die folgende Abfrage, aber funktioniert nicht.

DELETE 
FROM group 
WHERE id_group = 30 
AND (
    SELECT 
     count(*) AS id 
    FROM contacts co 
    INNER JOIN GROUP c ON co. GROUP = c.namegroup 
    WHERE c.id_group = 30 
) = 0 

Dank

+0

Möchten Sie alle Gruppen löschen, denen keine Kontakte zugeordnet sind? Oder möchten Sie nur die Gruppe mit der ID = 30 löschen, wenn sie keinem Kontakt zugeordnet ist? – 1000111

+0

Nur Gruppe mit der ID = 30, wenn sie keinem Kontakt zugeordnet ist. Vielen Dank! – gmyb

Antwort

0

Sie können die folgende Abfrage versuchen, wenn Sie Gruppe ID = 30 nur gelöscht werden soll, wenn die Gruppe nicht zu jedem Kontakt verbunden ist:

Abfrage # 1:

DELETE 
`groups` 
FROM `groups` 
LEFT JOIN contacts 
ON contacts.`group` = `groups`.namegroup 
WHERE `groups`.id_group = 30 
AND contacts.`group` IS NULL; 

Und wenn Sie möchten, Um alle Gruppen zu löschen, die keinen zugeordneten Kontakt haben, versuchen Sie stattdessen die folgende Abfrage:

Abfrage # 2:

DELETE 
`groups` 
FROM `groups` 
LEFT JOIN contacts 
ON contacts.`group` = `groups`.namegroup 
WHERE contacts.`group` IS NULL; 
+0

du bist der beste, es funktioniert! Vielen Dank! – gmyb

+0

Also welche hat tatsächlich für dich gearbeitet? @gmyb – 1000111

+0

Abfrage # 1 funktioniert jetzt! Vielen Dank – gmyb

0

Wenn Sie definieren firigen Schlüssel mysql dieses Problem umgehen und Sie brauchen nichts

In diesen Fällen (ohne forigen-Taste) i in der Regel zum ersten Mal ausgeführt folgende Abfrage zu tun:

select count(*) as id from contacts co inner join group c on co.group=c.namegroup where c.id_group=30 

und sagen Benutzer, die, wenn sie gelöscht werden können oder nicht, und wenn er diese Zeile löschen könnte:

Ich habe versucht, eine Lösung wie Abfrage zu finden, die Sie hatten, konnte aber nicht und schlagen diese Lösung für Sie vor.