考虑我在三个表上使用连接来获得所需的结果集......
现在在结果集中,无论如何我可以找出哪一行来自哪个表......?
更新: 我看到我错误地表达了这个问题....正如下面的一个答案所指出的,连接返回的结果集可能包含一行来自多个talbes的行......
所以问题实际上应该是“考虑我在三张桌子上使用联合来获得理想的结果集......”
答案 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所建议的那样,您必须查看辅助列以确定数据的来源,因为该信息在组合中丢失。