考虑我在三个表上使用连接来获得想要的结果集...Mysql加入 - 如何知道从哪个表检索哪一行...?
现在在那个结果集中,是否有无论如何,我可以找出哪一行来自哪个表......?
更新: 我看到我错误地表述了这个问题....正如下面的答案之一所指出的,由join返回的结果集可能会包含由多个talbe组成的列。 。
所以问题实际上应该是“考虑我使用的三个表工会得到期望的结果集...”
考虑我在三个表上使用连接来获得想要的结果集...Mysql加入 - 如何知道从哪个表检索哪一行...?
现在在那个结果集中,是否有无论如何,我可以找出哪一行来自哪个表......?
更新: 我看到我错误地表述了这个问题....正如下面的答案之一所指出的,由join返回的结果集可能会包含由多个talbe组成的列。 。
所以问题实际上应该是“考虑我使用的三个表工会得到期望的结果集...”
如果你问这个问题,那么你的数据库可能是不正确的结构。 (正确地是一个主观术语)。
规范化数据库上正确的SQL查询不应该依赖或不关心数据来自何处。
每行都是所有表的组合,空值插入到左/右/外连接的列中,这些列与连接标准不匹配。你也许可以测试一个列(来自一个特定的表)是否为空,并且从中得出非空值必须来自相反的表。
然后,如果您实际上正在执行UNION,正如Marcelo所建议的那样,您必须查看辅助列才能确定数据的来源,因为这些信息会在组合中丢失。
您可以将表标识列添加到每个:
select 'A' as table_name, col1, col2 from A
union
select 'B' as table_name, col1, col2 from B
union
...
这将返回由你的应用程序作为任何普通的select语句来处理一个结果集:
while (rows available) {
row = fetchrow
if row.table_name == 'A' then
do special handling for table A
else if row.table_name == 'B' then
do special handling for table B
else if ...
}
实际语法取决于您正在使用的语言,但大多数过程语言都遵循上面的方案。
您的意思是_union_? – 2010-04-15 10:21:01