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
    );

结论:

  1. 如何将查询插入具有不同宽度的 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
                     );