Hallo Jörg,
> Ich kann mir mit
> SELECT *
> FROM kind k
> LEFT JOIN eltern e
> ON k.id=e.ide
> WHERE e.ide IS NULL;
> alle Kinder anzeigen lassen, die keine Eltern (mehr) haben.
Der SQL wäre aus meiner Sicht so korrekt (siehe JOIN)
SELECT *
FROM kind k
LEFT JOIN eltern e
ON k.elternid=e.ide
WHERE e.ide IS NULL;
+----+----------+------+
| id | elternId | ide |
+----+----------+------+
| 3 | 3 | NULL |
+----+----------+------+
1 row in set (0.00 sec)
mysql>
> Ist JOIN in DELETE unzulässig?
Im Standard SQL ist im DELETE kein JOIN vorgesehen nur MySQL hat mal wieder eine Sonderlösung erfunden.
>Und wie bekomme ich denn die elternlosen Kinder weg?
Eventuell so...
DELETE
FROM kind
WHERE elternid NOT IN ( SELECT ide FROM eltern )
Query OK, 1 row affected (0.02 sec)
mysql> select * from kind;
+----+----------+
| id | elternId |
+----+----------+
| 1 | 1 |
| 2 | 2 |
+----+----------+
2 rows in set (0.00 sec)
mysql>
Hinweis:
Mit einem FOREIGN KEY Constraint kann verhindert werden, dass solche Datensätze überhaupt angelegt werden können.
Grüße
Thomas