• Kleine MySQL-Frage zum Frühstück. Wie selektiere ich aus in einer Tabelle, die keine entsprechenden Einträge in einer anderen Tabelle hat?

    Moin,

    komme gerade nicht selber drauf:
    Ich habe zwei Tabellen "Kisten" und "KInhalt".
    In "Kisten" sind verschiedene Kisten gespeichert. Jede hat eine "KistenID" und "KistenName".
    in "KInhalt" sind viele Sachen gespeichert und jeder sache ist (neben "InhaltID" und "InhaltName") eine "KistenID" zugeordnet. es können aber auch mehrere Sachen die selbe "KistenID" haben.
    So, bisher musste ich nur zu einer gegebenen "KistenID" die entsprechenden Sachen raussuchen.
    Jetzt möchte ich aber eine Abfrage auf leere Kisten haben. Also sollen alle "KistenID" selektiert werden, die keinen entsprechenden Eintrag in "KInhalt" haben.
    Da muss es doch etwas eleganteres geben, als in einer Schleife alle Kisten durchzugehen, oder?

    Vielen Dank!
    ----------
    Gruß

    Skipper
      • naja egal, grad mal ne db gebaut:

        SELECT id FROM kisten WHERE id NOT IN (SELECT id_kisten FROM artikel);

        wobei kisten:
        CREATE TABLE `kisten` (
        `id` int(10) NOT NULL AUTO_INCREMENT,
        `name` varchar(50) NOT NULL,
        PRIMARY KEY (`id`)
        )

        wobei artikel:
        CREATE TABLE `artikel` (
        `id` int(10) NOT NULL AUTO_INCREMENT,
        `id_kisten` int(10) DEFAULT NULL,
        `name` varchar(50) NOT NULL,
        PRIMARY KEY (`id`),
        KEY `id_kisten` (`id_kisten`),
        CONSTRAINT `artikel_ibfk_1` FOREIGN KEY (`id_kisten`) REFERENCES `artikel` (`id`) ON DELETE CASCADE
        )

        content:
        select * from kisten;
        +----+--------------+
        | id | name |
        +----+--------------+
        | 1 | BIG CHEST |
        | 2 | MIDDLE CHEST |
        | 3 | LITTLE CHEST |
        | 4 | MICRO CHEST |
        +----+--------------+

        select * from artikel;
        +----+-----------+------+
        | id | id_kisten | name |
        +----+-----------+------+
        | 1 | 1 | Pony |
        +----+-----------+------+