2010-07-29 324 views
14

我有两个表具有可变数量的列。 (我不知道有名称将有多少列或什么是),例如表A和B表SQL内部连接具有相同列名的两个表

表A:

ID | B_ID | {variable} 

表B

ID | {variable} 

查询:

SELECT TableA.*, TableB.* FROM TableA INNER JOIN TableB ON TableA.B_ID= TableB.id; 

当TableA和TableB都有一个同名的列时,我无法区分这两个不同的列。例如,两个表的列都有“名称”列,则此查询会导致:

ID | ID | B_ID | NAME | NAME | 
1 | 35 | 35 | bob | jim | 

我在寻找的是区分这两个表的方法。最好用列表名称来表示列名。

TableA_ID | TableB_ID | TableA_B_ID | TableA_NAME | TableB_NAME | 
     1 |  35 |   35 |   bob |   jim | 

我知道“AS”关键字,但问题是我不知道列名将在什么位置出现。 (我不知道,如果表A表B或将有列名)

所以我的问题是

你如何区分这两个表之间的列与INNER JOIN时,表可能有相同的列名?

我正在使用SQLite3。

回答

13

结果集(给出查询)应具有的所有表A柱之后的所有表B柱的侧向承载力,所以当你到了第二ID科拉姆,你知道你到表B的数据。

这就是说,它是会很奇怪,我认为要查询所有的数据从两个表的哪些你知道什么功能...

+1

听起来像某种时髦的动态SQL,可能会查询用户在运行时生成的表。 – FrustratedWithFormsDesigner 2010-07-29 18:00:42

+3

同意,如果您不知道列名称,那么您的设计有一些主要错误。 Select语句不应该使用select *,列名应该在连接中指定,尤其是在同一列返回两次的连接中,这会浪费服务器资源。 – HLGEM 2010-07-29 18:01:35

+0

如果表正在创建,他们有列名可以捕获然后,虽然... – AllenG 2010-07-29 18:02:15

6

这是无可否认的一个黑客攻击的解决方案,但这:

SELECT TableA.*, "#", TableB.* 
FROM TableA INNER JOIN TableB ON TableA.B_ID= TableB.id; 

会产生一个结果列表,它将被分成两列,分别是#列的左侧和右侧。

相关问题