当表已通过其他字段连接时,连接表中的字段

时间:2014-06-18 16:26:42

标签: mysql

我有两张桌子:

CREATE TABLE `osoby_dane` (
 `os_id` int(6) NOT NULL AUTO_INCREMENT PRIMARY KEY,
 `imie` text,
 `status` int(1)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `osoby_rank` (
 `os_id` int(6) NOT NULL PRIMARY KEY,
 `os_rank` int DEFAULT 1000,
 `status` int(1),
  CONSTRAINT `fk_rank` FOREIGN KEY (os_id) REFERENCES osoby_dane(os_id) on update cascade on delete restrict
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

示例:
osoby_dane:

os_id | imie | status |
1     |John  |1       | 

osoby_rank:

os_id | os_rank | status |
 1    | 1400    | 1      | 

我的问题是我怎样才能(如果我可以......)一对一地连接相同行(状态列)中的字段(如果我在一个表中编辑状态字段,那么在第二个中它将自动更改)。而且我不想使用触发功能

2 个答案:

答案 0 :(得分:1)

如果您不想使用触发器或外键,则无法自动使osoby_rank.status更新以匹配osoby_dane.status

更改后,您必须明确更改两列中的status

例如,您可以执行多表更新:

UPDATE osoby_dane INNER JOIN osoby_rank USING (os_id)
SET osoby_dane.status = 2,
    osoby_rank.status = 2
WHERE osoby_dane.os_id = 1;

正如@MarcusAdams建议的那样,另一个解决方案是将status存储在一个表或另一个表中,以避免冗余列。

答案 1 :(得分:0)

make in osoby_rank CONSTRAINT fk_status FOREIGN KEY (os_id, status) REFERENCES osoby_dane(os_id, status) on update cascade and osoby_dane make fk_status它应该正常工作