2014-07-13 53 views
0

我有2个表 表一自然连接不返回行

col1 col2 col3 col4 col5 
1  007 .. .. .. 
2  006 .. .. .. 
3  008 .. .. .. 

表B中

col1 col7 col8 col9 many columns 
    2   A AA 
    3   B BB 

SELECT col2,col8,col9 FROM table A natural join table B不返回在两个表中的所有行 col1具有相同的名称,数据类型和两者都主键

我也试过

SELECT col2,col8,col9 FROM table A natural join table B using (col1) 

上面得到#1064错误。

SELECT col8,col2,col9 FROM table A join table B ON A.col1=B.col1 

返回所需的结果。 为什么自然连接不返回任何行?

如果我使用

SELECT col2,col8,col9 
FROM table A 
JOIN table B 
LIMIT 0 , 30 

我得到以下结果

col8 col2 col9 
A  007 AA 
B  007 BB 
A  006 AA 
B  006 BB 
A  008 AA 
B  008 BB 
+0

你可能已经检查了这个,但是如果你没有,#1064错误代码通常指的是保留字的使用或者插入不兼容的类型到字段中(你没有做的)或者其他一些语法错误您的声明:请查看此链接http://www.inmotionhosting.com/support/website/database-troubleshooting/error-1064。这可能是在你真正的代码中你正在做的其中一个。你可以请发布解决方案,当你找到一个... – Davit

+0

@Davit让我检查保留字,谢谢如果我得到的解决方案将发布它 – AAB

+0

@Davit错误与保留关键字无关,请参阅下面的答案。 – Markus

回答

2

您收到此错误,因为自然连接不需要使用条款的。自然连接自动为两个表中存在的所有列自动命名。

您必须删除使用条款:

SELECT col2,col8,col9 FROM table A NATURAL JOIN table B

如果要命名的列(而不是接通状态),应使用的捧场,也可以结合加入与使用条款。

SELECT col2,col8,col9 FROM table A JOIN table B USING (col1)

当你刚刚加入,没有任何条件,你会得到两个表的Cross Join

+0

SELECT col2,col8,col9 FROM table一个NATURAL JOIN表B不返回任何行有任何想法为什么? – AAB

+0

在这种情况下,两个表(不仅是第1列)中的列没有匹配的值,所以列中的列更加相同。你可以尝试做一个NATURAL LEFT JOIN,它不会过滤你的“unjoinable”结果。在这种情况下,您必须使用上面给出的第二个概念来完成连接。 – Markus

+0

它在表B中显示为不匹配的列,但表A和B中唯一的一个共同列具有相同的名称,为什么不合并?做自然的左连接显示表B值都为NULL任何想法为什么?> – AAB