全部,
我正在复习一些基本的 MySQL JOIN
教程。杰夫·阿特伍德 gives an example在他的博客上是这样的:
SELECT * FROM TableA
LEFT OUTER JOIN TableB
ON TableA.name = TableB.name
在我看来,从语义的角度来看,查询不需要在第二行提及 TableB
。我理解正确吗?在我看来,所有信息都已在第 3 行中提供。
我并不是要对 SQL 语言的效率造成任何类型的麻烦,我只是想了解对 TableB
的提及是否会在这种情况下或其他情况下带来任何新信息.
最佳答案
它不会带来新的信息,但它确实带来了精度和为表格命名的能力:
SELECT a.* FROM TableA a
LEFT OUTER JOIN TableBWhichHasAReallyLongUnweildyName b
ON a.name = b.name
请注意,在这个公式中,我既可以明确地从 a 中请求数据,也可以在第 3 行中更轻松地找出连接。但是,编译器不会有关于从哪里获取什么信息的非任意指导除非我明确声明,否则要使用的表。考虑一下这是否是 SQL 的工作方式:
SELECT b.* FROM TableA a
LEFT OUTER JOIN
ON TableA.name = TableB.name b
WHERE TableB.value v > 1
我是说 tableB 的别名是“b”,还是 TableB.name 的别名是“b”?这只是令人困惑;最好是明确和权威的。
关于mysql - "TableB"中 "LEFT JOIN TableB ON TableA.name = TableB.name"的任何值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10115072/