如何在mysql中执行以下几点(可能使用phpmyadmin):
1)给定一个现有的数值列(colA),创建一个带有文本数据(colB)的新列,如果colA = 0则自动用“typeA”填充此列,如果colB>则自动填充“typeB”。 0?
2)给出以下2个表用户和文档:
表用户具有“用户名”和“用户ID”列, 表格文档包含“DocID”,“用户名”和“用户ID”列(我知道这是多余的)
表Docs中的用户名列为空,我必须在给定UserID的情况下自动填充它。
这两项任务的SQL代码是什么?
感谢
答案 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和用户名,则将所有“插入”更改为“更新”,以便更新它们以保持同步。