Ich arbeite an der SELECT-Klausel für den VALUES-Abschnitt einer SQL-INSERT-Anweisung. Eines der Felder des Datensatzes ist ein Fremdschlüssel für eine Tabelle von Fremdschlüsseln für andere Datensätze.Auswählen von Werten aus fremden Tabellen
Gegeben: Tabelle - Ing_Fundamental
+----------------+-------------------+
| ID_Fundamental | ID_Title_Category |
+----------------+-------------------+
Tabelle - Title_Category
+-------------------+----------+-------------+
| ID_Title_Category | ID_Title | ID_Category |
+-------------------+----------+-------------+
Tabelle - Titel
+----------+-------+
| ID_Title | Title |
+----------+-------+
Tabelle - Kategorien
+-------------+----------+
| ID_Category | Category |
+-------------+----------+
Ich möchte das ID_Title_Category
Feld auswählen, wo und Categories.Category = "Meat"
.
My SQL INSERT-Anweisung:
INSERT INTO Ing_Fundamental
(
Ing_Fundamental.ID_Title_Category
)
VALUES
(
(SELECT ????)
)
Hier ist die SQL für Ing_Fundamental CREATE TABLE-Anweisung:
CREATE TABLE IF NOT EXISTS Ing_Fundamental
(
ID_Fundamental INTEGER UNSIGNED PRIMARY KEY AUTO_INCREMENT NOT NULL,
ID_Title_Category INTEGER UNSIGNED,
FOREIGN KEY fk_ID_Title_Category(ID_Title_Category)
REFERENCES ing_title_categories(ID_Title_Category)
ON UPDATE CASCADE
ON DELETE RESTRICT,
UNIQUE(ID_Title_Category)
)
Mein Versuch an der SELECT-Anweisung ist:
(SELECT Ing_Title_Categories.ID_Title_Category
FROM Ing_Title_Categories
WHERE (ID_Title_Category = 0))
Aber die oben Anweisung wird nicht ordnungsgemäß funktionieren, da ID_Title_Category
Feldwert ist n ot richtig, es muss durch Nachschlagen von Werten in den Titles
und Categories
Tabellen ermittelt werden. Wie lautet die SQL-Syntax für die Auswahl des Felds ID_Title_Category
basierend auf den Feldern in den Tabellen Titles
und Categories
?
Edit 1: Hintergrund/design
Ein grundlegender Bestandteil hat eine eindeutige ID.
Eine grundlegende Zutat hat einen Titel und eine Kategorie.
Kategorien sind festgelegt (begrenzt).
Ein Benutzer möchte die Datenbank anhand eines Titels und einer Kategorie nach einer Zutat durchsuchen.
Ein Rezept enthält einen oder mehrere Bestandteile (Inhaltsstoff-IDs).
Ich erinnere mich nicht an meine Begründung für die Title_Category-Tabelle; Es könnte entweder Normalisierung sein oder die Notwendigkeit eines zusammengesetzten Primärschlüssels verringern.
Ich schreibe eine Anwendung in C++, um über SQL-Anweisungen und Abfragen mit der Datenbank zu interagieren.
In Programmierungsterminologie:
Der Ing_Fundamental-Datensatz enthält einen Title_Category-Datensatz.
Der Title_Category-Datensatz enthält einen Titeldatensatz und einen Kategoriedatensatz.
Alle Datensätze enthalten ein ID-Feld und ein oder mehrere Datenfelder (z. B. Text).
@philipxy: Ich dachte, dass es viele Zutaten geben kann, die einen gemeinsamen Titel und eine gemeinsame Kategorie verwenden, weshalb ich sie in eine separate Tabelle legte. Ich wollte das Paar nicht kopieren. –
@philipxy: Ich benutze den Begriff "verschachtelt", weil ich nicht an den richtigen Begriff denken konnte. Es ist keine direkte Eindämmung. Und nicht direkte fremde Tabellenreferenz. –
Als ich fragte, ob Sie ID_Title_Category benötigen, fragte ich im Rahmen der Frage, ob Sie vorschlagen, dass Sie ein Intro zu Informationsmodellierung und relationalen Datenbanken lesen. (Ihre Frage, wenn ich sie verstehe, ist grundlegend.) Ich meinte, dass wenn Paare (ID_Title, ID_Category) eindeutig und nicht null sind, dann kann dieses Paar PK & woanders FK sein und Sie brauchen keine ID_Title_Category. Obwohl es Gründe gibt, warum Leute in solchen Fällen trotzdem IDs hinzufügen. – philipxy