SQL 将查询结果中的多行插入到现有 table 的单个列中
SQL insert multiple rows from query result into a single column of an existing table
我是 SQL 的新手,我正在为插入函数而苦苦挣扎。
我正在使用 phpMyAdmin。
我正在尝试获取查询结果,一个列表(1 列)
并将其添加到超过 1 列的 table
每个结果都是一个新行。
就上下文而言,我正在处理奥运会数据。
我想查询 returns 有运动员参加比赛但未赢得任何奖牌的国家/地区列表(未在“总奖牌数”table 中找到的国家/地区)。
-- Find Countries who entered and did not win medals
SELECT find.Country
FROM (
SELECT DISTINCT Country
FROM `athletes`
) AS find
LEFT JOIN (
SELECT DISTINCT Country
FROM `total medals`
) AS inside
ON find.Country = inside.Country
WHERE inside.Country IS NULL;
我正在尝试将这 20 个国家添加到 'total medals' table。
我的假设是,它们将被添加到每隔一列的 NULLS 中。
Country Gold Silver Bronze Total Rank by Gold Rank by Total
[result1] NULL NULL NULL NULL NULL NULL
[result2] NULL NULL NULL NULL NULL NULL
[...etc] NULL NULL NULL NULL NULL NULL
最终目标是将奖牌数更改为 0,每行的金牌排名为 87,总排名为 78。我不确定是否也有一种方法可以一步完成,如果没有,我确定我可以想出将 NULL 更改为其他内容的方法。
[result1] & 0 & 0 & 0 & 0 & 87 & 78
[result2] & 0 & 0 & 0 & 0 & 87 & 78
[...etc] & 0 & 0 & 0 & 0 & 87 & 78
有一个非常相似的问题 here 几乎把我带到了那里,但它缺少查询结果。
我对此的理解是,我应该能够将我之前的查询插入值部分。
INSERT INTO `total medals`(Country)
VALUES ([Query]);
但是当我尝试这样做时,第 4 行出现语法错误 (Select find.Country)。
-- Find Countries who entered and did not win medals and add them to the medals table
INSERT INTO `total medals`(Country)
VALUES(
SELECT find.Country
FROM (
SELECT DISTINCT Country
FROM `athletes`
) AS find
LEFT JOIN (
SELECT DISTINCT Country
FROM `total medals`
) AS inside
ON find.Country = inside.Country
WHERE inside.Country IS NULL
);
结论:
- 如何将查询插入具有不同宽度的 table
2 加分 - 你能一步自动填充 0s 87 和 78 吗?
首先,您将使用 NOT EXISTS
来表达逻辑。 . .至少要简化它。然后,您将为所需的每一行添加值。然后你可以使用 INSERT . . . SELECT
:
添加你想要的值
INSERT INTO `total medals` (Country, Gold, Silver, Bronze, Total, Rank_by_Gold, Rank_By_Total)
SELECT DISTINCT a.Country, 0, 0, 0, 87, 78
FROM athletes a
WHERE NOT EXISTS (SELECT 1
FROM `total medals` tm
WHERE tm.Country = a.Country
);
我是 SQL 的新手,我正在为插入函数而苦苦挣扎。 我正在使用 phpMyAdmin。
我正在尝试获取查询结果,一个列表(1 列) 并将其添加到超过 1 列的 table 每个结果都是一个新行。
就上下文而言,我正在处理奥运会数据。 我想查询 returns 有运动员参加比赛但未赢得任何奖牌的国家/地区列表(未在“总奖牌数”table 中找到的国家/地区)。
-- Find Countries who entered and did not win medals
SELECT find.Country
FROM (
SELECT DISTINCT Country
FROM `athletes`
) AS find
LEFT JOIN (
SELECT DISTINCT Country
FROM `total medals`
) AS inside
ON find.Country = inside.Country
WHERE inside.Country IS NULL;
我正在尝试将这 20 个国家添加到 'total medals' table。 我的假设是,它们将被添加到每隔一列的 NULLS 中。
Country Gold Silver Bronze Total Rank by Gold Rank by Total
[result1] NULL NULL NULL NULL NULL NULL
[result2] NULL NULL NULL NULL NULL NULL
[...etc] NULL NULL NULL NULL NULL NULL
最终目标是将奖牌数更改为 0,每行的金牌排名为 87,总排名为 78。我不确定是否也有一种方法可以一步完成,如果没有,我确定我可以想出将 NULL 更改为其他内容的方法。
[result1] & 0 & 0 & 0 & 0 & 87 & 78
[result2] & 0 & 0 & 0 & 0 & 87 & 78
[...etc] & 0 & 0 & 0 & 0 & 87 & 78
有一个非常相似的问题 here 几乎把我带到了那里,但它缺少查询结果。
我对此的理解是,我应该能够将我之前的查询插入值部分。
INSERT INTO `total medals`(Country)
VALUES ([Query]);
但是当我尝试这样做时,第 4 行出现语法错误 (Select find.Country)。
-- Find Countries who entered and did not win medals and add them to the medals table
INSERT INTO `total medals`(Country)
VALUES(
SELECT find.Country
FROM (
SELECT DISTINCT Country
FROM `athletes`
) AS find
LEFT JOIN (
SELECT DISTINCT Country
FROM `total medals`
) AS inside
ON find.Country = inside.Country
WHERE inside.Country IS NULL
);
结论:
- 如何将查询插入具有不同宽度的 table 2 加分 - 你能一步自动填充 0s 87 和 78 吗?
首先,您将使用 NOT EXISTS
来表达逻辑。 . .至少要简化它。然后,您将为所需的每一行添加值。然后你可以使用 INSERT . . . SELECT
:
INSERT INTO `total medals` (Country, Gold, Silver, Bronze, Total, Rank_by_Gold, Rank_By_Total)
SELECT DISTINCT a.Country, 0, 0, 0, 87, 78
FROM athletes a
WHERE NOT EXISTS (SELECT 1
FROM `total medals` tm
WHERE tm.Country = a.Country
);