【问题标题】:Natural Join not returning rows自然连接不返回行
【发布时间】:2014-07-13 09:03:24
【问题描述】:

我有 2 张桌子 表A

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

【问题讨论】:

  • 你可能已经检查过了,但如果你没有检查过,#1064 错误代码通常是指使用保留字或在字段中插入不兼容的类型(你没有这样做)或您的语句中还有其他一些语法错误:查看此链接 inmotionhosting.com/support/website/database-troubleshooting/… 。可能是在您的真实代码中,您正在执行其中之一。找到解决方案后能否发布...
  • @Davit 让我检查保留字谢谢,如果我得到解决方案会发布它
  • @Davit 错误与保留关键字无关,请看下面我的回答。

标签: php mysql sql join jointable


【解决方案1】:

您收到此错误,因为自然连接不需要 using 子句。自然连接会自动命名两个表中都存在的所有列。

您必须删除 USING 子句:

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

如果你想命名应该用于连接的列(而不是 ON 条件),你也可以将连接与 using 子句结合起来。

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

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

【讨论】:

  • SELECT col2,col8,col9 FROM table A NATURAL JOIN table B 不返回任何行知道为什么吗?
  • 在这种情况下,两个表中有更多相同的列(不仅是第 1 列)没有匹配的值。您可以尝试做一个自然左连接,它不会过滤您的“不可连接”结果。在这种情况下,您必须使用我上面给您的第二个概念来进行连接。
  • 它在表 B 中显示为没有匹配的列,但表 A 和 B 中唯一的一个公共列具有相同的名称,为什么它们不合并?做自然左连接显示表 B 值都是 NULL 知道为什么吗?>
  • 您会看到 NULL 值,因为没有找到可用于合并的行。在这里你可以找到解释,LEFT JOIN 是如何工作的:Left Join。因为我现在不知道你的架构,所以我只能猜测,sry。
  • @Markus 感谢您的有用说明
猜你喜欢
  • 2015-04-07
  • 1970-01-01
  • 1970-01-01
  • 2015-01-20
  • 2017-09-28
  • 1970-01-01
  • 2013-02-18
  • 1970-01-01
  • 2020-12-17
相关资源
最近更新 更多