2016-10-03 48 views
0

以我SQL 5.5:的MySQL创建一个表内部联接UNION右连接

试图建立一个表,该表是一个INNER的结果JOIN表的& B,和(UNION)RIGHT JOIN表的ç& B.

Please see the image for the logic

CREATE TABLE IF NOT EXISTS TABLE_NAME AS (

(SELECT a.column1, b.column2 FROM TABLEA AS a 

INNER JOIN TABLEB AS b 

ON a.column1 = b.column1) 

UNION 

(SELECT c.column1, b.column2 FROM TABLEC AS c 

RIGHT JOIN TABLEB AS b 

ON b.column1 = c.column1) 

); 

错误:

ERROR 1064 (42000) at line 11: 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 '(SELECT a.column1, b.column2 FROM TABLEA AS a 

其他尝试:

CREATE TABLE IF NOT EXISTS TABLE_NAME AS (

(SELECT a.column1, b.column2 FROM TABLEA AS a 

INNER JOIN TABLEB AS b 

ON a.column1 = b.column1) 

UNION 

(SELECT c.column1, b.column2 FROM TABLEC AS c 

RIGHT JOIN TABLEB AS b 

ON b.column1 = c.column1) 

); 

Error: 

ERROR 1064 (42000) at line 11: 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 'UNION 

可以在任何大师提供一些建议?谢谢。

+0

从维恩图,我想你需要'LEFT JOIN',不'RIGHT JOIN'。 –

回答

0

尝试,而不是执行以下操作:

CREATE TABLE IF NOT EXISTS TABLE_NAME AS 

(SELECT a.column1, b.column2 FROM TABLEA AS a 

INNER JOIN TABLEB AS b 

ON a.column1 = b.column1) 

UNION 

(SELECT c.column1, b.column2 FROM TABLEC AS c 

RIGHT JOIN TABLEB AS b 

ON b.column1 = c.column1) 

See Demo


documentation

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name 
    [(create_definition,...)] 
    [table_options] 
    [partition_options] 
    [IGNORE | REPLACE] 
    [AS] query_expression 
报价

query_expression不应该用括号

被封闭
+0

可悲的是这不起作用:/。它只是说在下一步中创建的表不存在。我也尝试过“CREATE TABLE IF NOT EXISTS TABLE_NAME(select ....”,并且它返回相同的错误信息 – Chubaka

+0

你能否看看这个演示?http://sqlfiddle.com/#!9/16245f/1/0 @ Chubaka – 1000111

+0

Hi @ 1000111,感谢2美分我实际上是在MySQL 5.5中,如果我们将小提琴更改为MySQL 5.5,构建模式将显示未知错误:/ – Chubaka

0

试试这个

CREATE TABLE IF NOT EXISTS TABLE_NAME AS 
(
SELECT S.* 
FROM 
(
SELECT a.column1, b.column2 FROM TABLEA AS a 
INNER JOIN TABLEB AS b ON a.column1 = b.column1 
UNION 
SELECT c.column1, b.column2 FROM TABLEC AS c 
RIGHT JOIN TABLEB AS b ON b.column1 = c.column1 
) S 
); 
+0

不幸的是,一个不起作用。它只是在第11行返回“错误1146(42S02):TABLE_NAME不存在”。 – Chubaka

+0

嗯。我测试了这一点,它工作正常。你至少会注意到语法错误已经消失。 –

+0

Hi @ P.Salmon,你在MySQL 5.5吗? – Chubaka