首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql中的完全外连接或UNION

问mysql中的完全外连接或UNION
EN

Stack Overflow用户
提问于 2013-12-02 11:05:28
回答 2查看 631关注 0票数 1

我有两个临时表,分别是temp1和temp2(在运行时创建)。我需要执行“完全外连接”来从两个表中获取数据。但我弄错了

代码语言:javascript
复制
Error Number: 1064
You have an error in your SQL syntax; check the manual that corresponds to your 
MySQL server version for the right syntax to use near 'FULL OUTER JOIN cashExtTemp t2 
ON t1.code = t2.code'

SELECT * FROM cashIntTemp t1 FULL OUTER JOIN cashExtTemp t2 ON t1.code = t2.code

并从这个链接Full Outer Join in MySQL了解到在MySQL中完全的外部连接是不可能的,并尝试实现链接中给出的UNION。因为我使用的是临时表,所以它不能工作,我得到的错误是

代码语言:javascript
复制
Error Number: 1137 
Can't reopen table: 't1'

这是我的联合查询

代码语言:javascript
复制
SELECT * FROM cashIntTemp t1 LEFT JOIN cashExtTemp t2 ON t1.code = t2.code
UNION
SELECT * FROM cashIntTemp t1 RIGHT JOIN cashExtTemp t2 ON t1.code = t2.code

表中的数据如下表所示: cashIntTemp

代码语言:javascript
复制
code     qty     date
P001     100    2013-11-29 
P003     200    2013-11-30
P005     600    2013-11-30

表中的数据如下表所示: cashIntTemp

代码语言:javascript
复制
code     qty     date
P001     110    2013-11-29 
P002     250    2013-12-01
P005     650    2013-12-01

我需要一个查询来获取这两个表中的所有数据。

我需要这种格式的结果

代码语言:javascript
复制
code     qty     date        code    qty     date
P001     100    2013-11-29   P001    110   2013-11-29
P002     250    2013-12-01
P003     200    2013-11-29   
P005     600    2013-11-29   P005    650   2013-11-29

所以请帮我解决这个问题。提前谢谢。

EN

回答 2

Stack Overflow用户

发布于 2013-12-02 11:37:00

编辑:完全错过了关于临时表的部分,不知道这是否会起作用…

sqlfiddle:http://sqlfiddle.com/#!2/3bf61/10

我不能100%地得到你所抛出的东西,让我试着换个说法:你有两个表:cashIntTemp和cashExtTemp。在一个查询中,您希望从两个表中提取所有行。预期的结果是:

代码语言:javascript
复制
CODE    QTY DATE
P001    100 November, 29 2013 00:00:00+0000
P002    250 December, 01 2013 00:00:00+0000
P003    200 November, 30 2013 00:00:00+0000
P005    650 December, 01 2013 00:00:00+0000
P005    600 November, 30 2013 00:00:00+0000

只要它们是不同的表,UNION就会提供您想要的东西,同样是根据@Ryan。问题的一部分引用了两个不同的表,而另一部分引用了同一个表。

下面的内容不应该是你想要的吗?

代码语言:javascript
复制
SELECT * FROM `cashIntTemp` as `t1`
UNION
SELECT * FROM `cashExtTemp` as `t2`
ORDER BY `code`

或者,如果不想过滤重复的行,可以使用use UNION ALL:http://sqlfiddle.com/#!2/3bf61/11

查询:

代码语言:javascript
复制
SELECT * FROM `cashIntTemp` as `t1`
UNION ALL
SELECT * FROM `cashExtTemp` as `t2`
ORDER BY `code`

结果:

代码语言:javascript
复制
CODE    QTY DATE
P001    100 November, 29 2013 00:00:00+0000
P001    100 November, 29 2013 00:00:00+0000
P002    250 December, 01 2013 00:00:00+0000
P003    200 November, 30 2013 00:00:00+0000
P005    650 December, 01 2013 00:00:00+0000
P005    600 November, 30 2013 00:00:00+0000
票数 2
EN

Stack Overflow用户

发布于 2013-12-02 11:09:09

在MySql中,您不能在同一查询中多次访问单个临时表。你正在模拟完全的外连接,左连接联合到右连接,对吗?

您必须在单独的查询中将左连接的结果集和右连接的结果集插入到单独的临时表中(即,不使用联合)。

讲得通?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20320213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档