使用第二个表中的表中的值

时间:2017-08-23 11:49:35

标签: mysql

我有两个名为 users packages 的表。

用户中有一个名为" package"的列。在 packages 一个名为" id"。

的列中

我想要完成的是,如果用户表中的包ID被更改为,请说" 1",然后来自users表的另一个字段叫" storage& #34;应该改为相应的" maxstorage"从包裹表...这里有一点说明:

Tables

数据库:

DB

让我们说Joe想要升级到包裹号码2.然后在他的包裹被更换时应该更改他的存储量。它应该将来自packages表的maxstorage拖到users表中,然后在" storage" ...

列中

我怎样才能做到这一点?

  

很难向我解释,如果有人得到它,请编辑以便于解释。

3 个答案:

答案 0 :(得分:0)

您在查询中无法实现所需(或至少,不简单)。您必须将此逻辑移动到您的代码中,例如您有一个更改用户表中的行的查询。在该查询中,还要更新存储。

更好的是,完全删除users.storage_id。好的数据库不会重复。您已经拥有 packages 表中的数据,为什么要将其复制给用户?

SELECT users.name, packages.maxstorage 
FROM users
LEFT JOIN packages ON  (users.package_id = packages.id)

答案 1 :(得分:0)

可能是我没有正确理解你的问题,但是这个怎么样: (请对交易进行适当的考虑以避免冲突)。

CREATE TABLE P (ID INT, MAXSTORAGE INT);
CREATE TABLE U (USR_ID INT, PACKAGE_ID INT, STORAGE INT);

CREATE TRIGGER U_STORAGE_UPDATE BEFORE UPDATE ON U
  FOR EACH ROW BEGIN
    SET NEW.STORAGE = IF(NEW.PACKAGE_ID<>OLD.PACKAGE_ID , (SELECT MAXSTORAGE FROM P WHERE ID = NEW.PACKAGE_ID), NEW.STORAGE);
  END;

INSERT INTO P VALUES (1,12345);
INSERT INTO P VALUES (2,54321);

INSERT INTO U VALUES (1,1,12000);
INSERT INTO U VALUES (2,2,60000);

SELECT * FROM U;

UPDATE U SET PACKAGE_ID=2  WHERE USR_ID=1;

SELECT * FROM U;

UPDATE U SET STORAGE=23  
WHERE USR_ID=1;

SELECT * FROM U;

DROP TABLE P;
DROP TABLE U;

输出:   赌注

    USR_ID  PACKAGE_ID  STORAGE
1   1   1   12000
2   2   2   60000

发布第一次更新

    USR_ID  PACKAGE_ID  STORAGE
1   1   2   54321
2   2   2   60000

发布第二次更新

USR_ID  PACKAGE_ID  STORAGE
1   1   2   23
2   2   2   60000

答案 2 :(得分:0)

不回答问题但可能对您有用:

“用户”中的“包”列应在“包”中的“id”上具有外键约束。这可确保“package”列中的所有数据都与Packages表中的有效值相对应。否则,您可以在“包”列中输入一些数据,这些数据在“包”表中没有值。