Внутренний 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;
Создаст список результатов, которые будут разделены на два блока слева и справа от столбца #.