Mysql连接 - 如何知道从哪个表中检索哪一行......?

时间:2010-04-15 10:18:57

标签: mysql join

考虑我在三个表上使用连接来获得所需的结果集......

现在在结果集中,无论如何我可以找出哪一行来自哪个表......?

更新:     我看到我错误地表达了这个问题....正如下面的一个答案所指出的,连接返回的结果集可能包含一行来自多个talbes的行......

所以问题实际上应该是“考虑我在三张桌子上使用联合来获得理想的结果集......”

2 个答案:

答案 0 :(得分:5)

您可以为每个添加表标识符列:

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 ...

}

实际语法取决于您使用的语言,但大多数过程语言都遵循上述方案。

答案 1 :(得分:3)

如果您提出此问题,那么您的数据库可能无法正确构建。 (正确地是一个主观的术语)。

规范化数据库上的正确SQL查询不应该依赖,也不应该关注数据的来源。

每一行都是所有表的组合,在左/右/外连接的列中插入空值,这些列与连接条件不匹配。您可以测试列(来自特定表)是否为空,并从中派生出非空值必须来自相对的表。

然后,如果您实际执行UNION,正如Marcelo所建议的那样,您必须查看辅助列以确定数据的来源,因为该信息在组合中丢失。