我有3个表:a,b和c。表a与表b具有一对多关系,表c是从其他2个表中获取触发信息的表。
table a
------------------
id | name
1 | Juan
2 | Pete
3 | David
table b
----------------------
id | name | table_a_id
1 | Dog | 1
2 | Cat | 2
表C从表A中获取信息,并在表A上插入“ 对于插入到C中的每一行“还从表B中获得信息,并带有“ 在插入到B中的每一行之后更新C ”。
table c
----------------------
id | name a | name b | table_a_id |table_b_id
1 | juan | Dog | 1 | 1
2 | Pete | Cat | 2 | 2
当Pete想要同时拥有Cat和Dog时会发生此问题,因为它只会更新Pete的信息。我想要的是一种可以使所有信息都带有新行的方式。
table c
-------------------------------------------
id | name a | name b | table_a_id |table_b_id
1 | juan | Dog | 1 | 1
2 | Pete | Cat | 2 | 2
---->3 | Pete | Dog | 2 | 1
将不会创建表C的第三行,只会更新表C的第二行。
答案 0 :(得分:0)
您应该创建一个“虚拟表”或view,而不是table c
的物理副本。
例如:
CREATE VIEW table_c AS (
SELECT
t1.id AS a_id,
t1.`name` AS a_name,
t2.id AS b_id,
t2.`name` AS b_name
FROM table_a t1
LEFT JOIN table_b t2
ON (t2.table_a_id = t1.id)
)
现在您可以像这样从“表”中获取行:
SELECT * FROM table_c