SQL内连接两个具有相同列名的表

Ste*_*rst 14 sql sqlite

我有两个表,列数可变.(我不知道有多少列或有什么名称)例如表A和表B.

表A:

ID | B_ID | {variable} 
Run Code Online (Sandbox Code Playgroud)

表B

ID | {variable} 
Run Code Online (Sandbox Code Playgroud)

查询:

SELECT TableA.*, TableB.* FROM TableA INNER JOIN TableB ON TableA.B_ID= TableB.id;
Run Code Online (Sandbox Code Playgroud)

当TableA和TableB都具有相同名称的列时,我无法区分两个不同的列.例如,两个表都有"Name"列,此查询将导致:

ID | ID | B_ID | NAME | NAME |
 1 | 35 | 35   | bob  | jim  |
Run Code Online (Sandbox Code Playgroud)

我正在寻找的是一种区分两个表的方法.优选地具有列名称的优选,例如.

TableA_ID | TableB_ID | TableA_B_ID | TableA_NAME | TableB_NAME |
        1 |        35 |          35 |         bob |         jim |
Run Code Online (Sandbox Code Playgroud)

我知道"AS"关键字,但问题是我不知道列名将是什么.(我不知道TableA或TableB是否会有列Name)

所以我的问题是

当表可能具有相同的列名时,如何使用INNER JOIN区分两个表之间的列?

我正在使用SQLite3.

All*_*enG 13

您的结果集(给定您的查询)应该具有所有TableA列,后跟所有TableB列,因此当您到达第二ID列时,您知道您已进入TableB数据.

那就是说,你从两张桌子中查询所有关于你在功能上没有任何意义的数据,这对我来说似乎很奇怪......

  • 同意,如果您不知道列名称,则您的设计存在重大错误.select语句绝不应该使用select*,特别是在连接中指定列名时,同一列返回两次,这会浪费服务器资源. (3认同)

MPe*_*ier 8

这无疑是一个黑客解决方案,但是这个:

SELECT TableA.*, "#", TableB.* 
FROM TableA INNER JOIN TableB ON TableA.B_ID= TableB.id;
Run Code Online (Sandbox Code Playgroud)

将生成一个结果列表,该列表将分为两列,即#列的左侧和右侧.