Внутренний SQL соединяет две таблицы с одинаковыми именами столбцов

У меня есть две таблицы с переменным количеством столбцов. (Я не знаю, сколько столбцов или какие имена будут), например, таблицы A и таблицы B.

Таблица A:

ID | B_ID | {variable} 

TableB

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", но проблема в том, что я не знаю, как будут имена столбцов перед вами. (Я не знаю, будет ли TableA или TableB иметь имя столбца)

Итак, мой вопрос:

Как вы различаете столбцы между двумя таблицами с INNER JOIN, когда таблицы могут иметь одинаковые имена столбцов?

Я использую SQLite3.

Ответы

Ответ 1

В вашем результирующем наборе (с учетом вашего запроса) должны быть все столбцы TableA, за которыми следуют все столбцы TableB, поэтому, когда вы переходите ко второму столбцу ID, вы знаете, что находитесь в данных TableB.

Тем не менее, мне кажется странным, что вы запрашиваете все данные из двух таблиц, о которых вы ничего не знаете ничего...

Ответ 2

Это, по общему признанию, хакерское решение, но это:

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

Создаст список результатов, которые будут разделены на два блока слева и справа от столбца #.