我正在處理SQL INSERT語句的VALUES部分的SELECT子句。記錄的其中一個字段是外鍵到其他記錄的外鍵。從外部表中選擇值
考慮: 表 - Ing_Fundamental
+----------------+-------------------+
| ID_Fundamental | ID_Title_Category |
+----------------+-------------------+
表 - Title_Category
+-------------------+----------+-------------+
| ID_Title_Category | ID_Title | ID_Category |
+-------------------+----------+-------------+
表 - 標題
+----------+-------+
| ID_Title | Title |
+----------+-------+
表 - 分類
+-------------+----------+
| ID_Category | Category |
+-------------+----------+
我想選擇ID_Title_Category
字段,其中Titles.Title = "Hamburger"
和Categories.Category = "Meat"
。
我的SQL INSERT語句:
INSERT INTO Ing_Fundamental
(
Ing_Fundamental.ID_Title_Category
)
VALUES
(
(SELECT ????)
)
這裏的SQL CREATE TABLE語句Ing_Fundamental:
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)
)
我在SELECT語句的嘗試是:
(SELECT Ing_Title_Categories.ID_Title_Category
FROM Ing_Title_Categories
WHERE (ID_Title_Category = 0))
但上面語句不會正常工作,因爲ID_Title_Category
字段值爲n如果不正確,則必須通過查找Titles
和Categories
表中的值來確定。
那麼,根據Titles
和Categories
表中的字段選擇ID_Title_Category
字段的SQL語法是什麼?
編輯1:背景/設計
一種基本成分具有唯一的ID。
一個基本成分有一個標題和一個類別。
類別是固定的(有限)。
用戶希望根據標題和類別在數據庫中搜索配料。
配方包含一種或多種成分(成分ID)。
我不記得我對Title_Category表的理由;它可以是標準化或減少對複合主鍵的需求。
我正在用C++編寫一個應用程序,通過SQL語句和查詢與數據庫進行交互。
在編程術語中:
Ing_Fundamental記錄包含Title_Category記錄。
Title_Category記錄包含標題記錄和類別記錄。
所有記錄都包含一個ID字段和一個或多個數據字段(如文本)。
@philipxy:我在想,可能有很多成分使用一個共同的標題和類別,這就是爲什麼我把它們放在一個單獨的表。我不想複製這對。 –
@philipxy:我使用術語「嵌套」,因爲我想不出適當的術語。這不是直接遏制。而不是直接參考國外的表格。 –
當我問你是否需要ID_Title_Category時,我想知道是否建議你閱讀信息建模和關係數據庫的介紹。 (你的問題,如果我明白了,是基本的。)我的意思是說,如果(ID_Title,ID_Category)對是唯一的並且不是null,那麼該對可以是PK&其他FK,並且不需要ID_Title_Category。儘管無論如何,人們都會在這種情況下添加ID。 – philipxy