Einstein Rätsel auf SQL

Heinzi1991

Erfahrenes Mitglied
Vielleicht kennt einer diese Rätsel, der es noch nicht kennt hier die Angabe:

  • Es gibt fünf Häuser mit je einer anderen Farbe.
  • In jedem Haus wohnt eine Person einer anderen Nationalität.
  • Jeder Hausbewohner bevorzugt ein bestimmtes Getränk, raucht eine bestimmte Zigarettenmarke und hält ein bestimmtes Haustier.
  • Keine der fünf Personen trinkt das gleiche Getränk, raucht die gleichen Zigaretten oder hält das gleiche Tier wie einer der anderen.

15 Hinweise:
  1. Der Brite lebt im roten Haus.
  2. Der Schwede hält einen Hund.
  3. Der Däne trinkt gerne Tee.
  4. Das grüne Haus steht links vom weißen Haus.
  5. Der Besitzer de grünen Hauses trinkt Kaffee.
  6. Die Person, die Pall Mall raucht, hält einen Vogel.
  7. Der Mann, der im mittleren Haus wohnt, trinkt Milch.
  8. Der Besitzer des gelben Hauses raucht Dunhill.
  9. Der Norweger wohnt im ersten Haus.
  10. Der Marlboro-Raucher wohnt neben dem, der die Katze hält.
  11. Der Mann, der ein Pferd hält, wohnt neben dem, der Dunhill raucht.
  12. Der Winfield-Raucher trinkt gerne Bier.
  13. Der Norweger wohnt neben dem blauen Haus.
  14. Der Deutsche raucht Rothmans.
  15. Der Marlboro-Raucher hat einen Nachbarn, der Wasser trinkt.

Frage: Wer hat den Fisch als Haustier?

So ich will keine Antwort, wer den Fisch hat, die weiß ich schon, aber mir geht es eigentlich nur um SQL Befehle!
Also meine Schritte die ich schon gemacht habe schauen so aus:

Code:
CREATE TABLE nationalitaeten (nationalitaet varchar(10));


INSERT INTO nationalitaeten
VALUES ('brite');


INSERT INTO nationalitaeten
VALUES ('schwede');


INSERT INTO nationalitaeten
VALUES ('daene');


INSERT INTO nationalitaeten
VALUES ('norveger');


INSERT INTO nationalitaeten
VALUES ('deutscher');


CREATE TABLE farben (farbe varchar(10));


INSERT INTO farben
VALUES ('rot');


INSERT INTO farben
VALUES ('gruen');


INSERT INTO farben
VALUES ('weiss');


INSERT INTO farben
VALUES ('blau');


INSERT INTO farben
VALUES ('gelb');


CREATE TABLE getraenke (getraenk varchar(10));


INSERT INTO getraenke
VALUES ('kaffee');


INSERT INTO getraenke
VALUES ('bier');


INSERT INTO getraenke
VALUES ('wasser');


INSERT INTO getraenke
VALUES ('tee');


INSERT INTO getraenke
VALUES ('milch');


CREATE TABLE zigaretten (zigarette varchar(10));


INSERT INTO zigaretten
VALUES ('pall mall');


INSERT INTO zigaretten
VALUES ('dunhill');


INSERT INTO zigaretten
VALUES ('marlboro');


INSERT INTO zigaretten
VALUES ('winfield');


INSERT INTO zigaretten
VALUES ('rothman');


CREATE TABLE tiere (tier varchar(10));


INSERT INTO tiere
VALUES ('vogel');


INSERT INTO tiere
VALUES ('katze');


INSERT INTO tiere
VALUES ('pferd');


INSERT INTO tiere
VALUES ('hund');


INSERT INTO tiere
VALUES ('fisch');


CREATE TABLE ein_haus AS
SELECT *
FROM nationalitaeten,
     farben,
     getraenke,
     zigaretten,
     tiere
WHERE (nationalitaet='brite'
       AND farbe='rot'
       OR NOT nationalitaet='brite'
       AND NOT farbe='rot')
  AND (nationalitaet='schwede'
       AND tier='hund'
       OR NOT nationalitaet='schwede'
       AND NOT tier='hund')
  AND (nationalitaet='daene'
       AND getraenk='tee'
       OR NOT nationalitaet='daene'
       AND NOT getraenk='tee')
  AND (farbe='gruen'
       AND getraenk='kaffee'
       OR NOT farbe='gruen'
       AND NOT getraenk='kaffee')
  AND (zigarette='pall mall'
       AND tier='vogel'
       OR NOT zigarette='pall mall'
       AND NOT tier='vogel')
  AND (farbe='gelb'
       AND zigarette='dunhill'
       OR NOT farbe='gelb'
       AND NOT zigarette='dunhill')
  AND (NOT (zigarette='marlboro'
            AND tier='katze'))
  AND (NOT (zigarette='dunhill'
            AND tier='pferd'))
  AND (zigarette='winfield'
       AND getraenk='bier'
       OR NOT zigarette='winfield'
       AND NOT getraenk='bier')
  AND (NOT (nationalitaet='norveger'
            AND farbe='blau'))
  AND (nationalitaet='deutscher'
       AND zigarette='rothman'
       OR NOT nationalitaet='deutscher'
       AND NOT zigarette='rothman')
  AND (NOT (zigarette='marlboro'
            AND getraenk='wasser'));


CREATE TABLE haus_1_2 AS
SELECT haus_1.nationalitaet AS haus_1_nationalitaet,
       haus_1.farbe AS haus_1_farbe,
       haus_1.getraenk AS haus_1_getraenk,
       haus_1.zigarette AS haus_1_zigarette,
       haus_1.tier AS haus_1_tier,
       haus_2.nationalitaet AS haus_2_nationalitaet,
       haus_2.farbe AS haus_2_farbe,
       haus_2.getraenk AS haus_2_getraenk,
       haus_2.zigarette AS haus_2_zigarette,
       haus_2.tier AS haus_2_tier
FROM ein_haus haus_1,
     ein_haus haus_2
WHERE (haus_1.farbe='gruen'
       AND haus_2.farbe='weiss'
       OR NOT haus_1.farbe='gruen'
       AND NOT haus_2.farbe='weiss')
  AND haus_1.nationalitaet='norveger'
  AND (haus_1.zigarette='marlboro'
       AND haus_2.tier='katze'
       OR NOT haus_1.zigarette='marlboro')
  AND (haus_1.tier='katze'
       AND haus_2.zigarette='marlboro'
       OR NOT haus_1.tier='katze')
  AND (haus_1.zigarette='dunhill'
       AND haus_2.tier='pferd'
       OR NOT haus_1.zigarette='dunhill')
  AND (haus_1.tier='pferd'
       AND haus_2.zigarette='dunhill'
       OR NOT haus_1.tier='pferd')
  AND (haus_1.nationalitaet='norveger'
       AND haus_2.farbe='blau'
       OR NOT haus_1.nationalitaet='norveger')
  AND (haus_1.farbe='blau'
       AND haus_2.nationalitaet='norveger'
       OR NOT haus_1.farbe='blau')
  AND (haus_1.zigarette='marlboro'
       AND haus_2.getraenk='wasser'
       OR NOT haus_1.zigarette='marlboro')
  AND (haus_1.getraenk='wasser'
       AND haus_2.zigarette='marlboro'
       OR NOT haus_1.getraenk='wasser')
  AND NOT haus_1.nationalitaet=haus_2.nationalitaet
  AND NOT haus_1.farbe=haus_2.farbe
  AND NOT haus_1.getraenk=haus_2.getraenk
  AND NOT haus_1.zigarette=haus_2.zigarette
  AND NOT haus_1.tier=haus_2.tier;


CREATE TABLE haus_1_2_3 AS
SELECT haus_1.nationalitaet AS haus_1_nationalitaet,
       haus_1.farbe AS haus_1_farbe,
       haus_1.getraenk AS haus_1_getraenk,
       haus_1.zigarette AS haus_1_zigarette,
       haus_1.tier AS haus_1_tier,
       haus_2.nationalitaet AS haus_2_nationalitaet,
       haus_2.farbe AS haus_2_farbe,
       haus_2.getraenk AS haus_2_getraenk,
       haus_2.zigarette AS haus_2_zigarette,
       haus_2.tier AS haus_2_tier,
       haus_3.nationalitaet AS haus_3_nationalitaet,
       haus_3.farbe AS haus_3_farbe,
       haus_3.getraenk AS haus_3_getraenk,
       haus_3.zigarette AS haus_3_zigarette,
       haus_3.tier AS haus_3_tier
FROM ein_haus haus_1,
     ein_haus haus_2,
     ein_haus haus_3
WHERE (haus_1.farbe='gruen'
       AND haus_2.farbe='weiss'
       OR NOT haus_1.farbe='gruen'
       AND NOT haus_2.farbe='weiss')
  AND haus_1.nationalitaet='norveger'
  AND haus_3.getraenk='milch'
  AND (haus_1.zigarette='marlboro'
       AND haus_2.tier='katze'
       OR NOT haus_1.zigarette='marlboro')
  AND (haus_1.tier='katze'
       AND haus_2.zigarette='marlboro'
       OR NOT haus_1.tier='katze')
  AND (haus_1.zigarette='dunhill'
       AND haus_2.tier='pferd'
       OR NOT haus_1.zigarette='dunhill')
  AND (haus_1.tier='pferd'
       AND haus_2.zigarette='dunhill'
       OR NOT haus_1.tier='pferd')
  AND (haus_1.nationalitaet='norveger'
       AND haus_2.farbe='blau'
       OR NOT haus_1.nationalitaet='norveger')
  AND (haus_1.farbe='blau'
       AND haus_2.nationalitaet='norveger'
       OR NOT haus_1.farbe='blau')
  AND (haus_1.zigarette='marlboro'
       AND haus_2.getraenk='wasser'
       OR NOT haus_1.zigarette='marlboro')
  AND (haus_1.getraenk='wasser'
       AND haus_2.zigarette='marlboro'
       OR NOT haus_1.getraenk='wasser')
  AND NOT haus_1.nationalitaet=haus_2.nationalitaet
  AND NOT haus_1.nationalitaet=haus_3.nationalitaet
  AND NOT haus_2.nationalitaet=haus_3.nationalitaet
  AND NOT haus_1.farbe=haus_2.farbe
  AND NOT haus_1.farbe=haus_3.farbe
  AND NOT haus_2.farbe=haus_3.farbe
  AND NOT haus_1.getraenk=haus_2.getraenk
  AND NOT haus_1.getraenk=haus_3.getraenk
  AND NOT haus_2.getraenk=haus_3.getraenk
  AND NOT haus_1.zigarette=haus_2.zigarette
  AND NOT haus_1.zigarette=haus_3.zigarette
  AND NOT haus_2.zigarette=haus_3.zigarette
  AND NOT haus_1.tier=haus_2.tier
  AND NOT haus_1.tier=haus_3.tier
  AND NOT haus_2.tier=haus_3.tier;

Durch diese Befehle wurden schon die Hinweise 4, 7, 9, 10, 11, 13, 15 abgearbeitet! So für die nächste Tabelle, ich nehne sie haus_1_2_3_4 will ich Hinweis 1, 2, 3, 14 verarbeiten! und ehrlich gesagt weiß ich nicht wie ich das in SQL schreiben soll!
 

Neue Beiträge

Zurück