Как вставить результаты записи сравнения между двумя таблицами в другую таблицу? - PullRequest
0 голосов
/ 21 ноября 2018

status_tb

+----+----------+-------------+----------+
| id | status   | description | state_id |
+----+----------+-------------+----------+
|  1 |     new  | north       | 1        |
|  2 |   assign | south       | 2        |
|  3 |Postponed | east        | 2        |
|  4 |    Fixed | west        | 3        |
| 35 |     Test | South-test  | 4        |
+----+----------+-------------+----------+

status_backup_tb

+----------+----+----------+-------------+----------+
|backup_id | id | status   | description | state_id |
+----------+----+----------+-------------+----------+
|  1       |  1 |new       | north       | 1        |
|  2       |  2 |assign    | south       | 2        |
|  3       |  3 |Postponed | east        | 2        |
|  4       |  4 | Fixed    | west        | 3        |
|  7       |  35| Rejected | Testing     | 4        |
+----------+----+----------+-------------+----------+

Как только я получу свой входной результат из полученного mysql, мне нужно вставить эти результаты в другую таблицу (audit_status_tb) как показано ниже ... Как мне этого достичь?

Здесь sql, чтобы получить мои необходимые записи

(SELECT 
s.id, 
'status' AS Column_changed, 
s.status AS Old_value, 
b.status AS New_value 
FROM status_tb AS s
JOIN status_backup_tb AS b 
ON b.id = s.id AND 
   b.status <> s.status)

UNION ALL 

(SELECT 
s.id, 
'description' AS Column_changed, 
s.description AS Old_value, 
b.description AS New_value 
 FROM status_tb AS s
 JOIN status_backup_tb AS b 
ON b.id = s.id AND 
   b.description <> s.description)

UNION ALL

(SELECT 
s.id, 
'state_id' AS Column_changed, 
s.state_id AS Old_value, 
b.state_id AS New_value 
FROM status_tb AS s
JOIN status_backup_tb AS b 
ON b.id = s.id AND 
  b.state_id <> s.state_id)

audit_status_tb

|new_id | id |Column_changed| Old_value   |New_value |
+-------+----+--------------+-------------+----------+
|1      | 35 | status       | Test        | Rejected |
|2      | 35 |description   | South-test  | Testing  |  
+-------+----+--------------+-------------+----------+

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

1 Ответ

0 голосов
/ 21 ноября 2018

Вы можете просто использовать Insert Into .. Select выражение:

INSERT INTO audit_status_tb (id, Column_changed, Old_value, New_value) 

SELECT 
  s.id, 
  'status' AS Column_changed, 
  s.status AS Old_value, 
  b.status AS New_value 
FROM status_tb AS s
JOIN status_backup_tb AS b 
  ON b.id = s.id AND 
     b.status <> s.status

UNION ALL 

SELECT 
  s.id, 
  'description' AS Column_changed, 
  s.description AS Old_value, 
  b.description AS New_value 
FROM status_tb AS s
JOIN status_backup_tb AS b 
  ON b.id = s.id AND 
     b.description <> s.description

UNION ALL

SELECT 
  s.id, 
  'state_id' AS Column_changed, 
  s.state_id AS Old_value, 
  b.state_id AS New_value 
FROM status_tb AS s
JOIN status_backup_tb AS b 
  ON b.id = s.id AND 
  b.state_id <> s.state_id
...