я в состоянии сделать обновление между таблицами на основе подсчета во второй таблице, как так:Обновление с помощью соединения и группы со счетом
Update TableJ J
Inner Join (Select B_ID,C,S from TableC group by C,S having count=1) C
On J.C=C.C and J.S=C.S
Set T1.B_ID=T2.B_ID
проблема заключается в моем TableC не содержит S
, который хранится в другой таблице и связанный через B
назовите его Table_BS
(без шуток пожалуйста: |). Если бы я не придется беспокоиться о подсчете поэтому я мог бы сделать:
Update TableJ J
Inner Join TableC C
Inner Join TableBS BS
On J.C=C.C and C.S=BS.S
Set J.B_ID=BS.B_ID
За исключением вопроса есть, как с первоначальным подсчетам, я только хочу, чтобы вернуться B_ID
, когда есть только один C
запись с S
записи в TableBS
.
Update: Ну это, как далеко я получил (выбрать мудры):
Select J.ID,B.B_ID
From DBJ J Inner Join LBS B Inner Join C
On J.C=C.C And (
J.S_ID = B.S_ID
or J.S_ID=B.CS_ID)
and B.B_ID=C.B_ID
Что в моем случае возвращает три записи:
+----+------+
| ID | B_ID |
+----+------+
| 88 | 100 |
+----+------+
| 90 | 200 |
+----+------+
| 90 | 200 |
+----+------+
ID является запись, которую я хочу update, B_ID - это значение, которое я хочу обновить. В этом случае получается, что число, которое я пытаюсь ограничить, - это столбец идентификатора на выходе, другими словами, я хочу только обновить TableJ, запись 88 со значением 100. Запись TableJ 90 получается> 1 результат, поэтому я хотите пропустить его. Просто не уверен, где поставить group by
или count
здесь.
Обновление: Не знаю, почему это решение остается за пределами моего понимания, хотя и приближаясь, я могу получить выбор, чтобы вернуть идентификатор записи для обновления и значение для обновления только с этими записями с одним результатом :
Select J.ID,B.B_ID
From DBJ J Inner Join LBS B Inner Join C
On J.C=C.C And (
J.S_ID = B.S_ID
or J.S_ID=B.CS_ID)
and B.B_ID=C.B_ID group by J.ID having count(*)=1
который возвращает
+----+------+
| ID | B_ID |
+----+------+
| 88 | 100 |
+----+------+
и до сих пор не в состоянии теперь получить, что для обновления TableJ записи 88 поле B_ID со значением 100.
Спасибо, но это обновление посторонних записей. Основная идея заключается в том, что в TableC может быть несколько записей с записями в TableBS, но только с номером S. Я обновил свой ответ, когда я закрою его выше. – user3649739