Syntax Erötern

AliceDeh

Aktiver Benutzer
Beiträge
31
Grüße,

ich habe folgendes Problem:

INSERT INTO
T_Naehrstoffbedarf(PkF_Art_ID, PkF_Naehr_ID )
VALUES
((SELECT MAX(Pk_Art_ID) FROM T_Pflanzenarten WHERE Art='Aubergine'),
(SELECT MAX(Pk_Naehr_ID) FROM T_Naehrstoffe WHERE Naehrstoff='Stickstoff'))
;--/INSERT INTO

Ich möchte der Aubergine mehere Nährstoffe zuweisen oder ein Nährstoff zu meheren Gemüse.
Wie muss ich verfahren? Bis jetzt gehört 1 Nährstoff nur zu 1 Art auf diese Art und Weise und es wäre sehr unpraktisch alles so zu schreiben.

Habt ihr eine Idee?
 
Werbung:
Grüße,

ich habe folgendes Problem:

INSERT INTO
T_Naehrstoffbedarf(PkF_Art_ID, PkF_Naehr_ID )
VALUES
((SELECT MAX(Pk_Art_ID) FROM T_Pflanzenarten WHERE Art='Aubergine'),
(SELECT MAX(Pk_Naehr_ID) FROM T_Naehrstoffe WHERE Naehrstoff='Stickstoff'))
;--/INSERT INTO

Ich möchte der Aubergine mehere Nährstoffe zuweisen oder ein Nährstoff zu meheren Gemüse.
Wie muss ich verfahren? Bis jetzt gehört 1 Nährstoff nur zu 1 Art auf diese Art und Weise und es wäre sehr unpraktisch alles so zu schreiben.

Habt ihr eine Idee?

Hä?

Ohne Deine Tabellen und so zu kennen schwer zu verstehen, was Du willst. Aber ich bekomme schon Pickel wenn ich sehe, daß Du da offenbar max(Primary Key) einer anderen Tabelle zu ermitteln versuchst. Soll das die ID des zuletzt eingefügten Datensatzes da sein?
 
Du musst die anderen Tabellen doch gar nicht kennen. Ich möchte nur den Syntax wissen wie ich mehrere Nährstoffe in diesem INSERT INTO packe.
 
PS: ohne Max geht es nicht und das haben mir Profis empfohlen aus dem Forum .. um genauer zu sein der Admin, also wird das korrekt sein ;)
 
PS: ohne Max geht es nicht und das haben mir Profis empfohlen aus dem Forum .. um genauer zu sein der Admin, also wird das korrekt sein ;)

Ja. Ganz bestimmt. Und folgendes ist grundfalsch:

die Tabellen:
Code:
test=*# \d pflanzen;
  Table "public.pflanzen"
 Column |  Type  | Modifiers
--------+---------+-----------
 id  | integer | not null
 name  | text  |
Indexes:
  "pflanzen_pkey" PRIMARY KEY, btree (id)
Referenced by:
  TABLE "pflanzen_naehstoff" CONSTRAINT "pflanzen_naehstoff_p_id_fkey" FOREIGN KEY (p_id) REFERENCES pflanzen(id)

test=*# \d naehstoffe;
  Table "public.naehstoffe"
 Column |  Type  | Modifiers
--------+---------+-----------
 id  | integer | not null
 stoff  | text  |
Indexes:
  "naehstoffe_pkey" PRIMARY KEY, btree (id)
Referenced by:
  TABLE "pflanzen_naehstoff" CONSTRAINT "pflanzen_naehstoff_n_id_fkey" FOREIGN KEY (n_id) REFERENCES naehstoffe(id)

test=*# \d pflanzen_naehstoff;
Table "public.pflanzen_naehstoff"
 Column |  Type  | Modifiers
--------+---------+-----------
 p_id  | integer | not null
 n_id  | integer | not null
Indexes:
  "pflanzen_naehstoff_pkey" PRIMARY KEY, btree (p_id, n_id)
Foreign-key constraints:
  "pflanzen_naehstoff_n_id_fkey" FOREIGN KEY (n_id) REFERENCES naehstoffe(id)
  "pflanzen_naehstoff_p_id_fkey" FOREIGN KEY (p_id) REFERENCES pflanzen(id)

die Daten:

Code:
test=*# select * from pflanzen;
 id |  name
----+----------
  1 | tulpe
  2 | rose
  3 | gurke
  4 | erdbeere
(4 rows)

Time: 0,201 ms
test=*# select * from naehstoffe ;
 id |  stoff
----+------------
  1 | stickstoff
  2 | phosphor
  3 | kali
  4 | pferdemist
(4 rows)

Time: 0,189 ms
test=*# select * from pflanzen_naehstoff ;
 p_id | n_id
------+------
(0 rows)

In die letzte Tabelle will ich nun erdbeere mit pferdemist, kali und stickstoff eintragen (man sieht, ich hab davon definitiv keine Ahnung...)

Code:
test=*# with p as (select id from pflanzen where name = 'erdbeere'), n as (select id from naehstoffe where stoff in ('pferdemist','kali','stickstoff')) insert into pflanzen_naehstoff select * from p cross join n;
INSERT 0 3
Time: 0,804 ms
test=*# select * from pflanzen_naehstoff;
 p_id | n_id
------+------
  4 |  1
  4 |  3
  4 |  4
(3 rows)

Wie man sieht funktioniert das nicht, weil ich kein max() genommen habe. Oder?
 
@akretschmer Richtig... Du hast da alles falsch gemacht, was man falsch machen kann. Solltest vllt. nochmal mit den Grundlagen anfangen ;)

@AliceDeh alternativ einfach:
Code:
insert into pflanzen_naehstoff values (4, 1);
insert into pflanzen_naehstoff values (4, 3);
insert into pflanzen_naehstoff values (4, 4);
 
Ich verstehe deinen Code absolut nicht. Dieses "test" "with p" verstehe ich nicht.

Kann man diesen Code nicht umbauen:

Code:
-- Füge Inhalt "T_Naehrstoffbedarf" hinzu
USE My_Plantz
INSERT INTO
T_Naehrstoffbedarf(PkF_Art_ID, PkF_Naehr_ID )
    VALUES
    ((SELECT MAX(Pk_Art_ID) FROM T_Pflanzenarten WHERE Art='Aubergine'),
        (SELECT MAX(Pk_Naehr_ID) FROM T_Naehrstoffe WHERE Naehrstoff='Stickstoff'))
;--/INSERT INTO

Hier nochmal mein ER-Modell:

[URL=http://www.directupload.net/file/d/3870/agffcses_jpg.htm][/URL]

Ich möchte mehrer Nährstoffe einer Pflanzenart zuordnen.
 
Ok und was bedeutet INSERT 0 3 bei diesem Skript:

"
test=*# with p as (select id from pflanzen where name = 'erdbeere'), n as (select id from naehstoffe where stoff in ('pferdemist','kali','stickstoff')) insert into pflanzen_naehstoff select * from p cross join n;
INSERT 0 3
Time: 0,804 ms
test=*# select * from pflanzen_naehstoff;
p_id | n_id
------+------
4 | 1
4 | 3
4 | 4
(3 rows)"
 
Ach man ich versteh nicht was du meinst.

Ich poste mal das gesamte 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 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 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 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 IDENTITY(1,1),
         Art nvarchar (50),
         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 IDENTITY(1,1),
         PkF_Art_ID int,
         PkF_Naehr_ID int,
         PRIMARY KEY(Pk_Naehrbedarf_ID),
            CONSTRAINT
                c_Foreign_Art_ID
                FOREIGN KEY(PkF_Art_ID)
                REFERENCES T_Pflanzenarten(Pk_Art_ID),
            CONSTRAINT
                c_Foreign_Naehr_ID
                FOREIGN KEY(PkF_Naehr_ID)
                REFERENCES T_Naehrstoffe(Pk_Naehr_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 MAX(Pk_Gat_ID)FROM T_Pflanzengattungen WHERE Gattung='Nachtschatten')),
    ('Bohne', (SELECT MAX(Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Phaseolus')),
    ('Bohnenkraut', (SELECT MAX(Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Bohnenkraueter')),
    ('Blumenkohl', (SELECT MAX(Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Kohl')),
    ('Brokkoli', (SELECT MAX(Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Kohl')),
    ('Chicorée', (SELECT MAX(Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Asternartige')),
    ('Dill', (SELECT MAX(Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Anethum')),
    ('Erbse', (SELECT MAX(Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Erbsen')),
    ('Erdbeere', (SELECT MAX(Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Erdbeeren')),
    ('Fenchel', (SELECT MAX(Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Foeniculum')),
    ('Gurke', (SELECT MAX(Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Gurken')),
    ('Kapuzinerkresse', (SELECT MAX(Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Kapuzinerkressen')),
    ('Kartoffel', (SELECT MAX(Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Nachtschatten')),
    ('Knoblauch', (SELECT MAX(Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Lauch/Porree')),
    ('Kohl', (SELECT MAX(Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Kreuzbluetenartige')),
    ('Kohlrabi', (SELECT MAX(Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Kohl')),
    ('Kopfsalat', (SELECT MAX(Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Lattiche')),
    ('Lauch/Porree', (SELECT MAX(Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Lauch/Porree')),
    ('Mais', (SELECT MAX(Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Zea')),
    ('Mangold', (SELECT MAX(Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Rueben')),
    ('Moehre', (SELECT MAX(Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Moehren')),
    ('Paprika', (SELECT MAX(Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Paprikas')),
    ('Pastinake', (SELECT MAX(Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Pastinaken')),
    ('Pfefferminze', (SELECT MAX(Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Minzen')),
    ('Pfluecksalat', (SELECT MAX(Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Lattiche')),
    ('Radieschen', (SELECT MAX(Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Rettiche')),
    ('Rettich', (SELECT MAX(Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Rettiche')),
    ('Rote Beete', (SELECT MAX(Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Rueben')),
    ('Schwarzwurzel', (SELECT MAX(Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Schwarzwurzeln')),
    ('Sellerie', (SELECT MAX(Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Sellerie')),
    ('Spinat', (SELECT MAX(Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Spinat')),
    ('Tomate', (SELECT MAX(Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Nachtschatten')),
    ('Zucchini', (SELECT MAX(Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Kuerbisse')),
    ('Zwiebel', (SELECT MAX(Pk_Gat_ID) FROM T_Pflanzengattungen WHERE Gattung='Lauch/Porree'))
;--/INSERT INTO


-- Füge Inhalt "T_Naehrstoffbedarf" hinzu
USE My_Plantz
--INSERT INTO
--T_Naehrstoffbedarf(PkF_Art_ID, PkF_Naehr_ID )
    --VALUES
    --((SELECT MAX(Pk_Art_ID) FROM T_Pflanzenarten WHERE Art='Aubergine'),
        --(SELECT MAX(Pk_Naehr_ID) FROM T_Naehrstoffe WHERE Naehrstoff='Stickstoff'))
;--/INSERT INTO

Alles nacheinander ausführen. Jetzt hast die korrekten Tabellennamen und ich verstehe dann vielleicht besser was du meinst :)
 
Alles nacheinander ausführen. Jetzt hast die korrekten Tabellennamen und ich verstehe dann vielleicht besser was du meinst :)

Ich könnt das jetzt an PostgreSQL anpassen, was ich verwende. Und dann? Im Grunde genommen ist doch alles gesagt, siehe auch @Distrilec seine Antwort. Dein unnötiges max() verwendest Du übrigens bei den Inserts in Pflanzengattungen auch nicht. Egal.
 
Werbung:
@AliceDeh Willst du denn einer Gattung immer NUR den Nährstoff zu ordnen, der rein zufällig die höchste Id (DAS REPRÄSENTIERT DEIN max() ) hat ?
Angenommen du hast zwei Nährstoffe -> Kalzium mit der ID 1 und Natrium mit der ID 2

Mit deinem Max wäre es unmöglich einer Gattung irgendetwas anderes als Natrium zuzuweisen... Da Natrium nunmal die höchste ID hat :)
 
Zurück
Oben