MySQL: как выполнить эти 2 задачи - PullRequest
1 голос
/ 30 июля 2010

Как я могу сделать следующие пункты в MySQL (возможно, с помощью phpmyadmin):

1) Учитывая существующий столбец числовых значений (colA), создайте новый столбец с текстовыми данными (colB) и автоматически заполните этот столбец «typeA», если colA = 0, и «typeB», если colB> 0?

2) Учитывая следующие 2 таблицы Users и Docs:

Таблица Users имеет столбцы «Имя пользователя» и «Идентификатор пользователя», Таблица документов имеет столбцы «DocID», «Имя пользователя» и UserID »(я знаю, что это избыточно)

Столбец Имя пользователя в таблице Документы пуст, и я должен заполнить его автоматически с учетом идентификатора пользователя.

Какой код SQL для этих 2 задач?

спасибо

Ответы [ 2 ]

1 голос
/ 30 июля 2010

Для первого, я думаю, что ответ 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 пользователя и имя пользователя, так что они будут обновлены для обеспечения синхронизации.

1 голос
/ 30 июля 2010

Для первого вы можете сделать:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...