2013-02-21 4 views
0

Немного фона:добавив существующий столбец в существующую таблицу MS_Access

В этом проекте я пытаюсь объединить 2 таблицы которым я aquire из различных приложений.

Одно из приложений дают мне несколько таблиц которым у меня есть успешно объединяет в 1 таблицу:

DB_Total 

Другое приложение дает мне один стол с ничего, кроме тэгов. Эта таблица называется:

TagNames_EA 

Теперь я хотел бы добавить столбец «Name» из таблицы «TagNames_EA» в таблицу «DB_Total», так что я могу сравнить значения в поле «Имя» поля.

До сих пор, у меня есть этот код, чтобы сравнить и отфильтровать имена, которые не соответствуют:

SELECT 
    d.Address, 
    d.Type, 
    d.Name, 
    IIf(t.Name Is Null, False, True) AS match_found 
FROM 
    DB_Total AS d 
    LEFT JOIN TagNames_EA AS t 
    ON d.Name = t.Name; 

Это прекрасно работает, но я также хотел бы видеть значения «Имя» из TagNames_EA таблицу в таблице DB_Total.


Я знаю, что это возможно, чтобы добавить столбец в существующую таблицу с

ALTER TABLE DB_Total 
ADD Names_EA 

Но, когда я пытаюсь это:

ALTER TABLE DB_Total 
ADD Names FROM TagNames_EA AS Names_EA 

Это не работает

Есть простой способ сделать это?

Редактировать: Я попытался упростить способ объяснения моей ситуации.

Edit2: Пример

В таблице «DB_Total», у меня есть список имен, которым должны быть точно такими же, как имена в таблице «EA_Names».

DB_Total: 
    Name 
S1\SVS_AK\ENA[3] 
S1\SVS_AK\ENA[4] 
S1\SVS_AK\ENA[5] 
S1\SVS_AK\ENA[6] 
S1\SVS_AK\ENA[7] 
S1\SVS_AK\ENA[8] 

Однако иногда возникают ошибки, и я хотел бы проверить, есть ли имена, у которых нет совпадений. Как это:

TagNames_EA 
    Name 
S1\SVS_AK\ENA[3] 
S1\SVS_AK\ENA[4] 
S1\SVS_AK\ENA[5] 
S1\SVS_AK\EMA[6] <--- This is a Mistake and will come up as a mismatch 
S1\SVS_AK\ENA[7] 
S1\SVS_AK\ENA[8] 

В настоящее время код я использую, добавляет новый столбец в моей DB_Total таблице, либо значение «-1» (за матч) или значение «0» (для имени без матч)

Wich выглядит следующим образом:

DB_Total:    
    Name    match_found 
S1\SVS_AK\ENA[3]   -1 
S1\SVS_AK\ENA[4]   -1 
S1\SVS_AK\ENA[5]   -1 
S1\SVS_AK\ENA[6]    0 
S1\SVS_AK\ENA[7]   -1 
S1\SVS_AK\ENA[8]   -1 

То, что я хотел бы выполнить это таблица, которая включает в себя следующее:

DB_Total:    
    Name     Names_EA  match_found 
S1\SVS_AK\ENA[3]  S1\SVS_AK\ENA[3]  -1 
S1\SVS_AK\ENA[4]  S1\SVS_AK\ENA[4]  -1 
S1\SVS_AK\ENA[5]  S1\SVS_AK\ENA[5]  -1 
S1\SVS_AK\ENA[6]  S1\SVS_AK\EMA[6]   0 
S1\SVS_AK\ENA[7]  S1\SVS_AK\ENA[7]  -1 
S1\SVS_AK\ENA[8]  S1\SVS_AK\ENA[8]  -1 

После комментария Джо, я начинаю сомневаться, что это правильный способ сделать это, если я также хочу увидеть значения имени из EA_Table в той же таблице.

любая помощь будет оценена!

+0

Я смущен. Вы присоединяетесь к имени. Итак, имена в таблице Tagnames_EA уже есть - они совпадают с именами в таблице DB_Total. Вы просите, чтобы не-матчи также появлялись? – Joe

+0

Я понимаю путаницу, я постараюсь сделать это немного яснее для тех, кто не работал с этой базой данных последние 2 недели! – Gutanoth

+0

В настоящее время он добавляет столбец в таблицу DB_Total с именем «match_found» Если имена из двух таблиц совпадают, соответствующее поле в столбце «match_found» возвращает «-1», если они не совпадают, он возвращает a "0" – Gutanoth

ответ

1

Ваше заявление ALTER, конечно, не сработает. Обычно вы добавляете пустой столбец NULL, а затем используете второй оператор INSERT для заполнения данных. Однако вам придется иметь другой столбец, кроме имени, который должен определять, какое значение из таблицы _EA выполняет в таблице DB_Total, так как иначе вы не смогли бы гарантировать со 100% уверенностью, что вы соответствуете правильным строкам из обоих столы.

Вы можете попробовать следующее получить то, что я думаю, что ваш желаемый результат:

 
SELECT 
    d.Address, 
    d.Type, 
    d.Name, 
    t.name, 
    IIf(t.Name Is Null, False, True) AS match_found 
FROM 
    DB_Total AS d 
    LEFT JOIN TagNames_EA AS t 
    ON d.Name = t.Name; 

Это должно показать вам как результат имя рядом друг с другом. Однако, вероятно, было бы проще, если бы у вас было одно однозначное значение ID, чтобы убедиться, что у вас действительно есть подходящие строки.

1
SELECT 
    d.Address, 
    d.Type, 
    d.Name, 
    IIf(t.Name Is Null, False, True) AS match_found, 
    t.name as name_ea 
FROM 
    DB_Total AS d 
    FULL OUTER JOIN JOIN TagNames_EA AS t 
    ON d.Name = t.Name; 

Это дает вам nonmatches; однако на самом деле это не показывает вам, какая совпадение, до которой - вам решать, что соответствовало позже.

+0

Этот код генерирует ошибку после того, как она высоко оценивает «t» от t.name как name_ea в инструкции SELECT. – Gutanoth

+0

. Я забыл запятую, повторите попытку. – Joe

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