选择后的MySQL联合[重复]

Posted

技术标签:

【中文标题】选择后的MySQL联合[重复]【英文标题】:MySQL Union After Select [duplicate] 【发布时间】:2021-12-08 13:01:19 【问题描述】:

mysql 中通过SELECT 语句创建临时表后,有什么方法可以将行插入到临时表中? 我有这个按预期工作的查询:

SELECT goldusers_user_ci.user_id, goldusers_users.username, goldusers_user_ci.contact_value
FROM goldusers_users
INNER JOIN goldusers_user_ci
ON goldusers_users.id = goldusers_user_ci.user_id
ORDER BY user_id

这个想法是选择这个查询作为一个临时表并添加一行,如下所示:

SELECT * FROM(
SELECT goldusers_user_ci.user_id, goldusers_users.username, goldusers_user_ci.contact_value
FROM goldusers_users
INNER JOIN goldusers_user_ci
ON goldusers_users.id = goldusers_user_ci.user_id
ORDER BY user_id
) AS DBusers
INSERT INTO DBusers(user_id,username)
VALUES(-1,"All")

但是,我收到语法错误。有没有办法做到这一点?

**编辑: 我相信我实际上需要在选择后进行联合: ***问题是ORDER BY 语句的位置。将其移至底部有效

SELECT goldusers_user_ci.user_id, goldusers_users.username, goldusers_user_ci.contact_value
FROM goldusers_users
INNER JOIN goldusers_user_ci
ON goldusers_users.id = goldusers_user_ci.user_id
UNION ALL
SELECT -1 as user_id, "All" as username, "" as contact_value
ORDER BY user_id

【问题讨论】:

语法是INSERT INTO tablename (columns...) SELECT .... 查看INSERT的文档 AS DBusers 不会创建临时表。 @Barmar 是的,也许我不需要临时表。我希望在 select 语句之后向查询中添加一行。 然后使用UNION 【参考方案1】:

我无法测试您想要什么,但根据您的查询,我认为您想在选择数据后插入数据。

SELECT * FROM(
SELECT goldusers_user_ci.user_id, goldusers_users.username, goldusers_user_ci.contact_value
FROM goldusers_users
INNER JOIN goldusers_user_ci
ON goldusers_users.id = goldusers_user_ci.user_id
ORDER BY user_id
) AS DBusers;
INSERT INTO DBusers(user_id,username)
VALUES(-1,"All");

我觉得你只需要加分号;

【讨论】:

上面的第一个查询没有分号,但是在第二个查询中添加分号并不能解决问题。 @marksy95 需要分号来显示第一个查询的结束位置和第二个查询的开始位置。【参考方案2】:

这样的事情怎么样?

SELECT * 
INTO #TempTable
FROM(
        SELECT goldusers_user_ci.user_id, goldusers_users.username, goldusers_user_ci.contact_value
        FROM goldusers_users
        INNER JOIN goldusers_user_ci
        ON goldusers_users.id = goldusers_user_ci.user_id
        
        UNION ALL
        
        SELECT -1, 'All', ''
) AS DBusers

SELECT *
FROM #TempTable

DROP TABLE #TempTable

【讨论】:

MySQL 不在临时表名前使用# 是的,我的错。首先创建一个表,将#TempTable替换为该表。 MySQL 在INSERT INTO 语句中不使用FROM 您似乎在给出 SQL-Server 的答案。

以上是关于选择后的MySQL联合[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何联合2选择而不重复

使用联合从 MS Access 表中选择随机记录 [重复]

使用联合选择构建 MySQL 视图

MySql:使用联合或连接按计数选择

在 MySQL 中从其中一个表中选择 MAX(differ_key) 来连接特定键上的 2 个表 [重复]

con sno联合主键怎么设置