#mysql #database #join #database-design #multiple-columns
#mysql #База данных #Присоединиться #база данных-дизайн #несколько столбцов
Вопрос:
у меня есть таблица с именем tbl_employer
| id | employer | emp_type |
| 1 | aaa | GOVERNMENT |
| 2 | bbb | PRIVATE |
Я хочу объединить его с этой таблицей tbl_remit, потому что данные tbl_remit являются
|RemitNo| id | employer | emp_cat |Amt_Remit| AP_From | AP_To |
| 1 | 1 | aaa | GOVERNMENT | 20.00 |01/01/2016|01/31/2016|
| 2 | 1 | aaa | GOVERNMENT | 10.00 |02/01/2016|02/29/2016|
| 3 | 1 | aaa | | 10.00 |03/01/2016|03/31/2016|
| 4 | 2 | bbb | PRIVATE | 50.00 |01/01/2016|01/31/2016|
| 5 | 2 | bbb | PRIVATE | 50.00 |02/01/2016|02/29/2016|
| 6 | 2 | bbb | | 50.00 |03/01/2016|03/31/2016|
Я хочу заполнить недостающие данные из tbl_remit на основе tbl_employer.
|RemitNo| id | employer | emp_cat |Amt_Remit| AP_From | AP_To |
| 1 | 1 | aaa | GOVERNMENT | 20.00 |01/01/2016|01/31/2016|
| 2 | 1 | aaa | GOVERNMENT | 10.00 |02/01/2016|02/29/2016|
| 3 | 1 | aaa | GOVERNMENT | 10.00 |03/01/2016|03/31/2016|
| 4 | 2 | bbb | PRIVATE | 50.00 |01/01/2016|01/31/2016|
| 5 | 2 | bbb | PRIVATE | 50.00 |02/01/2016|02/29/2016|
| 6 | 2 | bbb | PRIVATE | 50.00 |03/01/2016|03/31/2016|
Я использовал инструкцию Join, но потерпел неудачу.
SELECT r.RemitNo
, r.id
, r.employer
, (SELECT e.emp_type
FROM tbl_employer e
WHERE e.ID = r.ID) emp_cat
, amt_remit
, ap_from
, ap_to
FROM tbl_remit r
JOIN tbl_employer e
ON r.ID = e.ID
Комментарии:
1. Вам нужен
UPDATE
запрос, так как вы хотите изменить таблицу.2. Вам нужен запрос на обновление… «обновить tbl_remit установить emp_cat = (выберите tbl_employer. emp_type из tbl_employer где tbl_employer. идентификатор = tbl_remit.id ) »
Ответ №1:
Может быть, это поможет:
UPDATE tbl_remit AS r
JOIN tbl_employer AS e ON e.employer=r.employer
SET r.emp_cat=e.emp_type
Имейте в виду, что если у вас много записей в таблицах, вам может потребоваться добавить INDEX
поля работодателя в таблицах. Я не уверен на 100%, что если r.id равно e.id и может использоваться для объединения, но если все в порядке, вы можете использовать этот запрос:
UPDATE tbl_remit AS r
JOIN tbl_employer AS e ON e.id=r.id
SET r.emp_cat=e.emp_type
Ваш неудачный запрос в вопросе должен выглядеть следующим образом:
SELECT r.RemitNo
, r.id
, r.employer
, e.emp_type
, r.amt_remit
, r.ap_from
, r.ap_to
FROM tbl_remit r
JOIN tbl_employer e
ON r.ID = e.ID
Комментарии:
1. не совсем — в mysql вы должны присоединиться перед установкой, и mysql выдаст предупреждение, если вы не предоставите предложение where.
2. Извините за ошибку, исправил ее. Спасибо. Да, он выдаст предупреждение, но выполнит запрос.
3. Спасибо вам за все это решение. Я думал о создании другой таблицы, просто чтобы объединить ее, я никогда не думал о простом обновлении tbl_remit. Я прочитаю больше о запросах mysql. и индексы. еще раз спасибо.
4. обновил мой ответ правильной версией вашего последнего запроса select
Ответ №2:
Вам нужен запрос на обновление
обновить tbl_remit установить emp_cat = (выберите tbl_employer. emp_type из tbl_employer где tbl_employer. идентификатор = tbl_remit.id )