Syntax Erötern

Achso ist das.

Na eine Gattung hat mehrere Arten und ich möchten den Arten (zb. Aubergine) mehere Nährstoffe (zb. Stickstoff, Kalizum, Phosphor) zuordnen
 
Werbung:
So:

Code:
USE My_Plantz
INSERT INTO
T_Naehrstoffbedarf(PkF_Art_ID, PkF_Naehr_ID)
    VALUES
        (2, 1);
;--/INSERT INTO

Und dann mit:

Code:
USE My_Plantz
SELECT T_PArten.Art, T_Nstoff.Naehrstoff, Menge
FROM        (
                T_Naehrstoffe AS T_Nstoff
                FULL JOIN
                T_Naehrstoffbedarf AS T_Nbedarf
                ON T_Nbedarf.PkF_Naehr_ID = T_Nstoff.Pk_Naehr_ID
            )
            FULL JOIN
            T_Pflanzenarten AS T_PArten
            ON T_Nbedarf.PkF_Art_ID = T_PArten.Pk_Art_ID
ORDER BY    T_PArten.Art;

abrufen?
 
Also ich glaube mir ist klar was du tun möchtest, man korrigiere mich wenn ich falsch liege.

Deine Zwischentabelle T_Naehrstoffe hat noch keine Daten und die Information, welche Pflanze welchen Nährstoffbedarf hat steht noch nicht in der Datenbank, muss also folglich von dir eingetragen werden.

Wenn du jetzt die IDs kennst, ist das hier der simpelste, denkbare Weg:
Code:
INSERT INTO
T_Naehrstoffbedarf(PkF_Art_ID, PkF_Naehr_ID)
    VALUES
        (2, 1);

Wenn du die IDs nicht kennst und vorher nicht raus suchen willst funktioniert das hier, auch wenn es nicht unbedingt schöner Code ist:
Code:
INSERT INTO
T_Naehrstoffbedarf(PkF_Art_ID, PkF_Naehr_ID )
  VALUES
  (   (SELECT Pk_Art_ID FROM T_Pflanzenarten WHERE Art='Aubergine'),
     (SELECT Pk_Naehr_ID FROM T_Naehrstoffe WHERE Naehrstoff='Stickstoff')   )
Das max() darf eigentlich nicht nötig sein denn das würde bedeuten, das es mehrere Auberginen oder mehrere Stickstoffarten gibt die du nicht unterscheidest sondern zufällig zuordnest. Wenn man das billigend in Kauf nimmt verhunzt man sich die Daten immer weiter. Man stelle sich vor man ruft jetzt zu einem expliziten Nährstoff Stickstoff alle zugehörigen Pflanzen auf, es gibt aber noch einen weiteren Eintrag zu Stickstoff. Dann hast du nie das richtige Ergebnis. Das wäre ganz großer Fusch!

Darum bitte ohne max() arbeiten. Es kommt eine Fehlermeldung beim INSERT und du weist bei diesem INSERT sofort es gibt mehrere Arten Stickstoff und du musst dein WHERE weiter Einschränken.
 
Ok super ich habe die DB nochmal überarbeitet. Ich danke für eure Tipps.
Ich poste nochmal den Code. Es gibt noch nicht viele Einträge, aber falls jemand Interesse hat oder selber einen Garten betreibt kann hier nützliche Informationen entnehmen.
Ich halte euch auf dem Laufenden. Hier erstmal das Skript :)
 
Code:
USE    My_Plantz


--#SKRIPT: Erstellen der Haupt- bzw. "Schlüssel"-tabellen.
--#TABELLEN_OHNE_FREMDSCHLÜSSEL ! BEGIN / BEGIN !


--Erstelle Tabelle "T_Pflanzenfamilie"
--Erstelle "PRIMARY KEY" auf Pk_Fam_ID
USE My_Plantz
CREATE TABLE
    T_Pflanzenfamilien
        (Pk_Fam_ID int NOT NULL UNIQUE IDENTITY(1,1),
         Familie nvarchar (50),
         PRIMARY KEY(Pk_Fam_ID))
; --/CREATE TABLE "T_Pflanzenfamilie"


--Erstelle Tabelle "T_Naehrstoffe"
--Erstelle "PRIMARY KEY" auf Pk_Naehr_ID
USE My_Plantz
CREATE TABLE
    T_Naehrstoffe
        (Pk_Naehr_ID int NOT NULL UNIQUE IDENTITY(1,1),
         Naehrstoff nvarchar (50),
         Naehrstoffgruppe nvarchar (50),
         PRIMARY KEY(Pk_Naehr_ID))
; --/CREATE TABLE "T_Naehrstoffe"


--#TABELLEN_OHNE_FREMDSCHLÜSSEL ! ENDE / ENDE !

Code:
USE    My_Plantz


--#SKRIPT: Erstellen der Haupt- bzw. "Schlüssel"-tabellen.


--#TABELLEN_MIT_FREMDSCHLÜSSEL ! BEGIN / BEGIN !



--Erstelle Tabelle "T_Pflanzengattungen"
--Erstelle "PRIMARY KEY" auf Pk_Gat_ID
--Erstelle "FOREIGN KEY" Pk_Fam_ID wird Fremdschlüssel als PkF_Fam_ID in "T_Pflanzengattungen"
USE My_Plantz
CREATE TABLE
    T_Pflanzengattungen
        (Pk_Gat_ID int NOT NULL UNIQUE IDENTITY(1,1),
         Gattung nvarchar (50),
         PkF_Fam_ID int,
         PRIMARY KEY(Pk_Gat_ID),
            CONSTRAINT
                c_Foreign_Fam_ID --Pk_Fam_ID <> PkF_Fam_ID
                FOREIGN KEY(PkF_Fam_ID)
                REFERENCES T_Pflanzenfamilien(Pk_Fam_ID))
; --/CREATE TABLE "T_Pflanzengattungen"


--Erstelle Tabelle "T_Pflanzenarten"
--Erstelle "PRIMARY KEY" auf Pk_Art_ID
--Erstelle "FOREIGN KEY" Pk_Gat_ID wird Fremdschlüssel als PkF_Gat_ID in "T_Pflanzenart"
--Erstelle "FOREIGN KEY" Pk_Fam_ID wird Fremdschlüssel als PkF_Fam_ID in "T_Pflanzenart"
USE My_Plantz
CREATE TABLE
    T_Pflanzenarten
        (Pk_Art_ID int NOT NULL UNIQUE IDENTITY(1,1),
         Art nvarchar (50),
         Wurzeltyp text,
         PkF_Gat_ID int, --Von: Pflanzengattungen PRIMARY KEY
         PRIMARY KEY(Pk_Art_ID),
            CONSTRAINT
                c_Foreign_Gat_ID --Pk_Gat_ID <> PkF_Gat_ID
                FOREIGN KEY(PkF_Gat_ID)
                REFERENCES T_Pflanzengattungen(Pk_Gat_ID))
; --/CREATE TABLE "T_Pflanzengattung"


--Erstelle Tabelle "T_Naehrstoffbedarf"
--Erstelle "PRIMARY KEY" auf Pk_Naehrbedarf_ID
--Erstelle "FOREIGN KEY" Pk_Art_ID wird Fremdschlüssel als PkF_Art_ID in "T_Naehrstoffbedarf"
--Erstelle "FOREIGN KEY" Pk_Naehr_ID wird Fremdschlüssel als PkF_Naehr_ID in "T_Naehrstoffbedarf"
USE My_Plantz
CREATE TABLE
    T_Naehrstoffbedarf
        (Pk_Naehrbedarf_ID int NOT NULL UNIQUE IDENTITY(1,1),
         PkF_Art_ID int,
         Empfohlene_Guano_Menge decimal(5,2),
         Feuchtigkeitslevel text,
         Sonnenbedarf text,
         PRIMARY KEY(Pk_Naehrbedarf_ID),
            CONSTRAINT
                c_Foreign_Art_ID
                FOREIGN KEY(PkF_Art_ID)
                REFERENCES T_Pflanzenarten(Pk_Art_ID))
; --/CREATE TABLE "T_Pflanzengattung"
 
Code:
USE    My_Plantz


--#SKRIPT: Einfügen der Tabelleninhalte.



-- Füge Inhalt "T_Naehrstoffe" hinzu
USE My_Plantz
INSERT INTO
T_Naehrstoffe(Naehrstoff, Naehrstoffgruppe)
    VALUES
    ('Stickstoff', 'beweglich'),
    ('Phosphor', 'beweglich'),
    ('Kalium', 'beweglich'),
    ('Mangesium', 'beweglich'),
    ('Zink', 'beweglich'),
    ('Eisen', 'unbeweglich'),
    ('Kalzium', 'unbeweglich'),
    ('Schwefel', 'unbeweglich'),
    ('Mangan', 'unbeweglich'),
    ('Bor', 'unbeweglich'),
    ('Kupfer', 'unbeweglich'),
    ('Molybdän', 'unbeweglich'),
    ('Chlor', 'unbeweglich'),
    ('Cobalt', 'unbeweglich'),
    ('Silicium', 'unbeweglich'),
    ('Schwefel', 'unbeweglich')
;--/INSERT INTO


-- Füge Inhalt "T_Pflanzenfamilien" hinzu
USE My_Plantz
INSERT INTO
T_Pflanzenfamilien(Familie)
    VALUES
    ('Nachtschattengewaechse'),
    ('Huelsenfruechtler'),
    ('Lippenbluetler'),
    ('Kreuzbluetler'),
    ('Korbbluetler'),
    ('Doldenbluetler'),
    ('Rosengewaechse'),
    ('Kuerbisgewaechse'),
    ('Kapuzinerkressengewaechse'),
    ('Amaryllisgewaechse'),
    ('Suessgraeser'),
    ('Fuchsschwanzgewaechse')
;--/INSERT INTO



-- Füge Inhalt "T_Pflanzengattungen" hinzu
USE My_Plantz
INSERT INTO
T_Pflanzengattungen(Gattung, PkF_Fam_ID)
    VALUES
    ('Nachtschatten', (SELECT Pk_Fam_ID FROM T_Pflanzenfamilien WHERE Familie='Nachtschattengewaechse')),
    ('Phaseolus', (SELECT Pk_Fam_ID FROM T_Pflanzenfamilien WHERE Familie='Huelsenfruechtler')),
    ('Bohnenkraueter', (SELECT Pk_Fam_ID FROM T_Pflanzenfamilien WHERE Familie='Lippenbluetler')),
    ('Kohl', (SELECT Pk_Fam_ID FROM T_Pflanzenfamilien WHERE Familie='Kreuzbluetler')),
    ('Asternartige', (SELECT Pk_Fam_ID FROM T_Pflanzenfamilien WHERE Familie='Korbbluetler')),
    ('Anethum', (SELECT Pk_Fam_ID FROM T_Pflanzenfamilien WHERE Familie='Doldenbluetler')),
    ('Erbsen', (SELECT Pk_Fam_ID FROM T_Pflanzenfamilien WHERE Familie='Huelsenfruechtler')),
    ('Erdbeeren', (SELECT Pk_Fam_ID FROM T_Pflanzenfamilien WHERE Familie='Rosengewaechse')),
    ('Foeniculum', (SELECT Pk_Fam_ID FROM T_Pflanzenfamilien WHERE Familie='Doldenbluetler')),
    ('Gurken', (SELECT Pk_Fam_ID FROM T_Pflanzenfamilien WHERE Familie='Kuerbisgewaechse')),
    ('Kapuzinerkressen', (SELECT Pk_Fam_ID FROM T_Pflanzenfamilien WHERE Familie='Kapuzinerkressengewaechse')),
    ('Lauch/Porree', (SELECT Pk_Fam_ID FROM T_Pflanzenfamilien WHERE Familie='Amaryllisgewaechse')),
    ('Kreuzbluetenartige', (SELECT Pk_Fam_ID FROM T_Pflanzenfamilien WHERE Familie='Kreuzbluetler')),
    ('Lattiche', (SELECT Pk_Fam_ID FROM T_Pflanzenfamilien WHERE Familie='Korbbluetler')),
    ('Zea', (SELECT Pk_Fam_ID FROM T_Pflanzenfamilien WHERE Familie='Suessgraeser')),
    ('Rueben', (SELECT Pk_Fam_ID FROM T_Pflanzenfamilien WHERE Familie='Fuchsschwanzgewaechse')),
    ('Moehren', (SELECT Pk_Fam_ID FROM T_Pflanzenfamilien WHERE Familie='Doldenbluetler')),
    ('Paprikas', (SELECT Pk_Fam_ID FROM T_Pflanzenfamilien WHERE Familie='Nachtschattengewaechse')),
    ('Pastinaken', (SELECT Pk_Fam_ID FROM T_Pflanzenfamilien WHERE Familie='Doldenbluetler')),
    ('Minzen', (SELECT Pk_Fam_ID FROM T_Pflanzenfamilien WHERE Familie='Lippenbluetler')),   
    ('Rettiche', (SELECT Pk_Fam_ID FROM T_Pflanzenfamilien WHERE Familie='Kreuzbluetler')),
    ('Schwarzwurzeln', (SELECT Pk_Fam_ID FROM T_Pflanzenfamilien WHERE Familie='Korbbluetler')),
    ('Sellerie', (SELECT Pk_Fam_ID FROM T_Pflanzenfamilien WHERE Familie='Doldenbluetler')),
    ('Spinat', (SELECT Pk_Fam_ID FROM T_Pflanzenfamilien WHERE Familie='Fuchsschwanzgewaechse')),
    ('Kuerbisse', (SELECT Pk_Fam_ID FROM T_Pflanzenfamilien WHERE Familie='Kuerbisgewaechse'))
;--/INSERT INTO


-- Füge Inhalt "T_Pflanzenarten" hinzu
USE My_Plantz
INSERT INTO
T_Pflanzenarten(Art, PkF_Gat_ID)
    VALUES
    ('Aubergine', (SELECT (Pk_Gat_ID)FROM T_Pflanzengattungen WHERE Gattung='Nachtschatten')), --ID 1
    ('Blumenkohl', (SELECT (Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Kohl')), --ID 2
    ('Buschbohne', (SELECT (Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Phaseolus')), --ID 3
    ('Bohnenkraut', (SELECT (Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Bohnenkraueter')), --ID 4
    ('Brokkoli', (SELECT (Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Kohl')), --ID 5
    ('Chicorée', (SELECT (Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Asternartige')), --ID 6
    ('Dill', (SELECT (Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Anethum')), --ID 7
    ('Erbse', (SELECT (Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Erbsen')), --ID 8
    ('Erdbeere', (SELECT (Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Erdbeeren')), --ID 9
    ('Fenchel', (SELECT (Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Foeniculum')), --ID 10
    ('Gurke', (SELECT (Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Gurken')), --ID 11
    ('Kapuzinerkresse', (SELECT (Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Kapuzinerkressen')), --ID 12
    ('Kartoffel', (SELECT (Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Nachtschatten')), --ID 13
    ('Knoblauch', (SELECT (Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Lauch/Porree')), --ID 14
    ('Kohl', (SELECT (Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Kreuzbluetenartige')), --ID 15
    ('Kohlrabi', (SELECT (Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Kohl')), --ID 16
    ('Kopfsalat', (SELECT (Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Lattiche')), --ID 17
    ('Lauch/Porree', (SELECT (Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Lauch/Porree')), --ID 18
    ('Mais', (SELECT (Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Zea')), --ID 19
    ('Mangold', (SELECT (Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Rueben')), --ID 20
    ('Moehre', (SELECT (Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Moehren')), --ID 21
    ('Paprika', (SELECT (Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Paprikas')), --ID 22
    ('Pastinake', (SELECT (Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Pastinaken')), --ID 23
    ('Pfefferminze', (SELECT (Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Minzen')), --ID 24
    ('Pfluecksalat', (SELECT (Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Lattiche')), --ID 25
    ('Radieschen', (SELECT (Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Rettiche')), --ID 26
    ('Rettich', (SELECT (Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Rettiche')), --ID 27
    ('Rote Beete', (SELECT (Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Rueben')), --ID 28
    ('Schwarzwurzel', (SELECT (Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Schwarzwurzeln')), --ID 29
    ('Sellerie', (SELECT (Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Sellerie')), --ID 30
    ('Spinat', (SELECT (Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Spinat')), --ID 31
    ('Tomate', (SELECT (Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Nachtschatten')), --ID 32
    ('Zucchini', (SELECT (Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Kuerbisse')), --ID 33
    ('Zwiebel', (SELECT (Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Lauch/Porree')) -- ID 34
;--/INSERT INTO
 
Werbung:
Code:
USE    My_Plantz


--#SKRIPT: JOIN's.



-- Zeige "Art" + "Gattung" aus "Familie"
-- Eine "Familie" hat meherere "Gattungen" in der sich "meherere Arten" befinden 1:n:m
USE My_Plantz
SELECT        T_PArten.Art, T_PGat.Gattung, T_PFam.Familie  
FROM        (
                T_Pflanzenfamilien AS T_PFam
                INNER JOIN                                    --# 1. Join Familien X Gattungen
                T_Pflanzengattungen AS T_PGat
                ON T_PGat.PkF_Fam_ID = T_PFam.Pk_Fam_ID
            )
            INNER JOIN                                        --# 2. Join xGattungen X Arten
            T_Pflanzenarten AS T_PArten
            ON T_PArten.PkF_Gat_ID = T_PGat.Pk_Gat_ID
ORDER BY    T_PArten.Art; 


-- Zeige "Art" + "Empfohlene Guano-Menge"
USE My_Plantz
SELECT T_PArten.Art, T_Nbedarf.Empfohlene_Guano_Menge
FROM        (
                T_Pflanzenarten AS T_PArten
                INNER JOIN                                    --# 3. Join xArten + Empfohlene Guano-Menge
                T_Naehrstoffbedarf AS T_Nbedarf
                ON T_Nbedarf.PkF_Art_ID = T_PArten.Pk_Art_ID
            )
ORDER BY    T_PArten.Art;
 
Zurück
Oben