2010-07-29 4 views
14

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

TableA:

ID | B_ID | {variable} 

TableB

ID | {variable} 

Запрос:

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

Когда TableA и TableB имеют столбец с таким же именем, я не могу различать два разных столбца. К примеру оба таблиц имеет столбец «Name» этот запрос приведет:

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 собираются иметь столбец Name)

Так что мой вопрос

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

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

ответ

13

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

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

+1

Звучит как какой-то фанковый динамический SQL, который может запрашивать таблицы, созданные пользователем во время выполнения пользователем. – FrustratedWithFormsDesigner

+3

Согласитесь, если вы не знаете названия столбцов, в вашем дизайне есть что-то серьезное. Операторы выбора никогда не должны использовать select *, имена столбцов должны быть указаны особенно в объединении, где один и тот же столбец дважды возвращается, это расточительно для ресурсов сервера. – HLGEM

+0

Если таблицы создаются, они имеют имена столбцов, которые могут быть захвачены тогда, хотя ... – AllenG

6

Это правда хак решение, но это:

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

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

Смежные вопросы