2015-03-18 3 views
0

таблицы имеют следующие столбцы:SQL Сравнить 2 колонки от 2-х таблиц, чтобы завершить еще один столбец

Table A: 
TIN, 
Fee_Sched, 
Effective_Date 

Table B: 
TIN, 
Fee_Sched, 
Fee_Sched_Eff 

TableB.Fee_Sched & TableB.Fee_Sched_Eff в настоящее время пустой

Это то, что я хочу сделать :
Я хочу сравнить два столбца TIN, и когда есть совпадение, мне нужны соответствующие результаты из TableA.Fee_Sched для печати в TableB.Fee_Sched и результаты из TableA.Effective_Date для печати в TableB.Fee_Sched_Eff

Я предполагаю, что я бы использовал объединение или объединение и, возможно, оператор IF (если tableA.TIN = tableB.TIN, а затем print tableA.fee_sched и TableA.Effective_Date). Но, я не уверен, как я определяю, в каком столбце должны быть сохранены результаты или как правильно организовать код.

**Example:** 
Table A 
TIN Fee_Sched Effective_Date 
123 ABCEDF  1/1/2011 
456 ZYXABC  9/9/2009 

TABLE B 
TIN Fee_Sched Fee_Sched_Eff 
123 blank  blank 

**Results:** 
TABLE B 
TIN Fee_Sched Fee_Sched_Eff 
123 ABCEDF  1/1/2011 

Я попытался это:

Insert INTO dbo.TableB (Fee_Sched, Fee_Sched_Eff) 
SELECT Fee_Sched, Effective_Date 
FROM dbo.TableA Where dbo.TableA.TIN = dbo.TableB.TIN; 

Но, я получаю эту ошибку:

Msg 4104, Level 16, State 1, Line 3 The multi-part identifier "dbo.TableB.TIN" could not be bound.

+0

@nweg Вставьте в dbo.TableB (Fee_Sched, Fee_Sched_Eff) ВЫБРАТЬ Fee_Sched, Effective_Date ИЗ dbo.TableA Где dbo.TableA.TIN = dbo.TableB.TIN; Но я получаю эту ошибку: Msg 4104, Level 16, State 1, Line 3 Идентификатор из нескольких частей «dbo.TableB.TIN» не может быть связан. – Karrie

ответ

0

Есть четыре основных глаголы/действий в SQL:

  • select извлекает данные
  • insert добавляет данные
  • delete удаляет данные
  • update данные изменения.

Update это тот, который вам нужно использовать. С MS SQL вы можете добиться желаемого результата с помощью этого update запроса:

update b 
set b.Fee_Sched = a.Fee_Sched, b.Fee_Sched_Eff = Effective_Date 
from TableB b 
join TableA a on a.TIN = b.TIN 
+0

Спасибо! Это сработало! При соединении этих двух таблиц есть причина, почему таблица B была включена в предложение FROM, а не в таблицу A? Если таблица А была указана в предложении FROM (и соответствующие изменения были внесены в запрос), будут ли такие же результаты заполнены? – Karrie

+0

Использование 'from join b' или' from b join a' не имеет значения - я использовал 'b' из-за привычки; важно то, что есть соединение. – jpw

0

Ну, первые вещи первое: если вы хотите изменить таблицу B, вы ищет команду UPDATE. Также обратите внимание, что вы можете использовать SELECT внутри оператора UPDATE, и вы можете ссылаться на «внешнюю» таблицу внутри SELECT. Это должно сделать трюк:

набор обновлений B B.fee_sched = (SELECT fee_sched FROM A WHERE A.TIN = B.TIN)

Наконец, помните, чтобы всегда после которых RDBMS вы используете, так как может разницы о том, что вы можете написать для каждого из них (Microsoft SQL, Oracle, MySQL?)

+0

Спасибо! Я использую Microsoft SQL. Я получил следующую ошибку: Subquery возвратил более 1 значения. Это недопустимо, когда подзапрос следует =,! =, <, <= , >,> = или когда подзапрос используется как выражение. – Karrie

+0

Ну, тогда у вас есть проблема. Вы должны объявить столбец TIN как UNIQUE в таблице A.Если это не UNIQUE, может быть более одной строки в A, которая соответствует одной строке в B. – andrechalom

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