我有一个包含大约10个连接的SQL查询。其中一个联接让我有些困惑。我的联接是这样的:
SELECT TableA.colum1, TableJ.column1
FROM TableA
INNER JOIN TableB ON TableA.someColumn = TableB.someColumn
INNER JOIN TableC ON TableC.someColumn = TableB.someColumn
所以,他们在某种程度上被链接在一起。然后我有了这个连接,其中TableA被重用,加入不同的列而不是beore。可能我在查询中不习惯这种情况,所以我的理解并不清楚。
INNER JOIN TableJ ON TableA.someOtherColumn = TableJ.someColumn
这对其他人来说是否有点奇怪?您可以在一系列连接中加入两个新表吗?
感谢。
答案 0 :(得分:3)
这一点都不奇怪:TableA
可以有多个外键“连接”到不同的表,让你可以根据需要加入多个表。
在这种情况下,两个外键都是必需的,因此您可以进行内连接。在其他情况下,键可以是可选的,在这种情况下,您将使用外连接。但重要的是,一个表可以拥有模型所需的外键数量,因此从同一个表中获得多个连接是完全自然的。
答案 1 :(得分:1)
所以要明确,你有类似的东西:
SELECT TableA.colum1, TableJ.column1
FROM TableA
INNER JOIN TableB ON TableA.someColumn = TableB.someColumn
INNER JOIN TableC ON TableC.someColumn = TableB.someColumn
INNER JOIN TableJ ON TableA.someOtherColumn = TableJ.someColumn
你想知道这是否有效?
答案是“这取决于但可能是肯定的。”假设您的加入条件是正确的,是的,这很好。 SQL是关系型的。使用第1列将表A连接到表B并使用第2列(或3或27或其他)将表A连接到表J是完全有效的。
您可能想要调查您的索引并确保您的联接是最佳的...但当然,您正在做的事情没有任何违法行为。例如,没有表格需要链接在一起,或者只能使用一列。我唯一关心的是性能,并确保你有正确的索引来支持你的连接。在这里,在SQL语句前面运行EXPLAIN并调查输出。 http://www.sitepoint.com/using-explain-to-write-better-mysql-queries/可能会派上用场。