mysql:如何执行这2个任务

时间:2010-07-30 16:49:16

标签: mysql phpmyadmin

如何在mysql中执行以下几点(可能使用phpmyadmin):

1)给定一个现有的数值列(colA),创建一个带有文本数据(colB)的新列,如果colA = 0则自动用“typeA”填充此列,如果colB>则自动填充“typeB”。 0?

2)给出以下2个表用户和文档:

表用户具有“用户名”和“用户ID”列, 表格文档包含“DocID”,“用户名”和“用户ID”列(我知道这是多余的)

表Docs中的用户名列为空,我必须在给定UserID的情况下自动填充它。

这两项任务的SQL代码是什么?

感谢

2 个答案:

答案 0 :(得分:1)

对于第一个,你可以这样做:

UPDATE table_1 SET colB=IF(colA=0, 'typeA', IF(colA>0, 'typeB', '???'));

我不知道你在问题中指定的方式是否正确“和”typeB“如果colB> 0 ”,因为colB是你要写的列。

对于第二个问题,您应该使用视图在表Docs中拥有用户名。无论如何要更新它,您可以使用以下内容:

UPDATE Docs d SET Username=(SELECT Username FROM Users u WHERE u.UserID=d.UserId)

以下是如何创建包含用户名的视图:

CREATE VIEW Docs_view AS
SELECT Docs.*, Users.Username
FROM Docs
LEFT JOIN Users ON Docs.UserID=Users.UserID;

首先从Username删除Docs列。

现在,当您想要选择文档时,您也可以看到用户名:

SELECT * FROM Docs_view

当您添加新记录时,您只需指定UserID

答案 1 :(得分:1)

对于第一个,我认为True Soft的答案应该有效。

对于第二个问题,您可能希望使用触发器来维护非规范化的用户名字段。


DELIMITER //

CREATE TRIGGER Docs_after_insert_trigger AFTER INSERT ON Docs
FOR EACH ROW
BEGIN
    IF ( COALESCE(@DISABLE_TRIGGERS, 0)  1 ) THEN
        UPDATE Docs 
            SET Username = ( SELECT Username FROM Users where UserID = new.UserID ) 
            WHERE DocID = new.DocID;
    END IF;
END //

为“更新后”创建类似的触发器,如果​​文档将更改UserID和用户名,则将所有“插入”更改为“更新”,以便更新它们以保持同步。