mysql:如何执行这两个任务

发布于 2024-09-12 08:20:31 字数 325 浏览 4 评论 0原文

我如何在 mysql 中执行以下操作(可能使用 phpmyadmin):

1)给定现有的数值列(colA),创建一个包含文本数据的新列(colB),并在 colA = 的情况下自动用“typeA”填充此列0,如果 colB > 则为“typeB” 0 ?

2)给定以下2个表Users和Docs:

表Users具有“Username”和“UserID”列, 表文档有“DocID”、“用户名”和“用户ID”列(我知道这是多余的)

表文档中的用户名列是空的,我必须根据给定的用户ID自动填充它。

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

谢谢

how can I do the following points in mysql (possibly using phpmyadmin):

1) Given an existing column of numeric values (colA), create a new column with text data (colB) and automatically fill this column with "typeA" if colA = 0, and "typeB" if colB > 0 ?

2) Given the following 2 tables Users and Docs:

Table Users has the columns "Username" and "UserID",
Table Docs has columns "DocID", "Username" and UserID" (it is redundant, I know)

The column Username in table Docs is empty and I have to fill it automatically given the UserID.

What's the SQL code for these 2 tasks ?

thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

乞讨 2024-09-19 08:20:31

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

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;

首先从 Docs 中删除列 Username

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

SELECT * FROM Docs_view

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

For the first one, you can do:

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

I don't know if it is ok how you specify in your question "and "typeB" if colB > 0", because colB is the column where you want to write.

For your second question, you should use a view to have the username in table Docs. To update it anyway, you can use the following:

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

Here is how to create a view that contains the Username:

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

First drop the column Username from Docs.

Now, when you want to select the documents, you can see the Usernames too:

SELECT * FROM Docs_view

And when you add a new record, you only have to specify UserID.

心碎的声音 2024-09-19 08:20:31

对于第一个,我认为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 //

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

For the first one, I think that True Soft's answer should work.

For the second question, you probably want to use triggers to maintain the denormalized Username field.


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 //

Create a similar trigger for 'after update' changing all 'insert' to 'update' if the Docs will ever change UserID and Username, so that they'll be updated to stay synchronized.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文