gpt4 book ai didi

mysql - 从外部表中选择值

转载 作者:行者123 更新时间:2023-11-30 21:54:58 24 4
gpt4 key购买 nike

我正在处理 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 ????)
)

这是 Ing_Fundamental 的 SQL CREATE TABLE 语句:

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字段值不正确,必须通过查找 Titles 中的值来确定和 Categories表格。

那么,选择 ID_Title_Category 的 SQL 语法是什么?字段基于 Titles 中的字段和 Categories表?

编辑 1:背景/设计
基本成分具有唯一 ID。
基本成分有名称和类别。
类别是固定的(有限的)。

用户想要根据标题和类别在数据库中搜索成分。

一个食谱包含一种或多种成分(成分 ID)。

我不记得我对 Title_Category 表的理由;它可以是规范化或减少对复合主键的需求。

我正在用 C++ 编写应用程序以通过 SQL 语句和查询与数据库交互。

在编程术语中:
Ing_Fundamental 记录包含 Title_Category 记录。
Title_Category 记录包含 Title 记录和 Category 记录。
所有记录都包含一个 ID 字段和一个或多个数据字段(例如文本)。

最佳答案

I want to select the ID_Title_Category field where Titles.Title = "Hamburger" and Categories.Category = "Meat".

这没有意义。大概你的意思是你想要 select ID_Title_Category from Title_Category wherecondition。但什么是 conditionTitlesCategories 行是什么?您无需了解更多 SQL 即可这么说。

您可能意味着您想要 select ID_Title_Category from Title_Category rows where row (ID_Title) is in select ID_Table from Titles 其中Title = 'Hamburger' 并且行 (ID_Category) 位于 select ID_Category from Categories where Category = 'Meat'

知道 SQL 允许您在 (subselect) 中编写 (...) 会很有帮助>.

select ID_Title_Category
from Title_Category
where (ID_Title) in (select ID_Title from Titles where Title = 'Hamburger')
and (ID_Category) in (select ID_Category from Categories where Category = 'Meat')

或者您的意思可能是您希望 select ID_Title_Category from Title_CategoryTC(比方说)其中存在 T 的值。 ID_Title & C.ID_Category 其中 T 行(例如)在 TitlesTC.ID_Title = T.ID_Title和 T.Title = 'Hamburger'C 行(例如)在 CategoriesTC.ID_Category = C.ID_Category 和 C.Category = '肉'

那么很高兴知道在 SQL 中 T cross join U is rows (T.X,...,U.Y,...) where row (T.X,...)T 中,行 (U.Y,...)U 中。 (,cross join 绑定(bind)比各种 join 更松散。)

select TC.ID_Title_Category
from Title_Category TC
cross join Titles T
cross join Categories C
where TC.ID_Title = T.ID_Title and T.Title = 'Hamburger'
and TC.ID_Category = C.ID_Category and C.Category = 'Meat'

此外,T cross join Ucondition 可以表示为T join U on 条件

select TC.ID_Title_Category
from Title_Category TC
join Titles T
on TC.ID_Title = T.ID_Title and T.Title = 'Hamburger'
join Categories C
on TC.ID_Category = C.ID_Category and C.Category = 'Meat'

EXISTS(subselect).

我们不需要知道约束(PK、UNIQUE、FK 等)来查询。我们确实需要每个基表行说明情况。然后我们可以通过基表中的行来表示结果中的行。要使用关系运算符,我们需要知道如何在谓词表达式和关系表达式之间进行转换。我们还可以通过每个结果行对情况的描述来描述结果中的行。 (这就是您如何证明 in 的直观使用。)Is there any rule of thumb to construct SQL query from a human-readable description?

关于mysql - 从外部表中选择值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45580252/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com