SQL内部连接具有相同列名的两个表
问题描述:
我有两个表具有可变数量的列。 (我不知道有名称将有多少列或什么是),例如表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。
答
结果集(给出查询)应具有的所有表A柱之后的所有表B柱的侧向承载力,所以当你到了第二ID
科拉姆,你知道你到表B的数据。
这就是说,它是会很奇怪,我认为要查询所有的数据从两个表的哪些你知道什么功能...
答
这是无可否认的一个黑客攻击的解决方案,但这:
SELECT TableA.*, "#", TableB.*
FROM TableA INNER JOIN TableB ON TableA.B_ID= TableB.id;
会产生一个结果列表,它将被分成两列,分别是#列的左侧和右侧。
听起来像某种时髦的动态SQL,可能会查询用户在运行时生成的表。 – FrustratedWithFormsDesigner 2010-07-29 18:00:42
同意,如果您不知道列名称,那么您的设计有一些主要错误。 Select语句不应该使用select *,列名应该在连接中指定,尤其是在同一列返回两次的连接中,这会浪费服务器资源。 – HLGEM 2010-07-29 18:01:35
如果表正在创建,他们有列名可以捕获然后,虽然... – AllenG 2010-07-29 18:02:15