2010-07-30 3 views
1

:MySQL은 :이 두 작업을 수행하는 방법을 내가 MySQL의에서 (아마도 사용하면 phpMyAdmin) 다음 사항을 할 수있는 방법을

1) 숫자 값 (콜라의 기존 열을 감안할 때)를 텍스트 데이터로 새 열을 생성 colB> 0 인 경우 "typeA", colB> 0 인 경우 "typeB"로이 열을 자동으로 채 웁니다.

표 사용자 열 "이름"과 "사용자 ID", 표 문서가 열 "DocID에", "사용자 이름"과 사용자 ID "가있다 (그것이 다음 2 테이블 사용자 및 문서 도구는 다음을 감안할 때

2) 중복, 나는 테이블 문서 도구의

열 이름이 비어) 알고 나는 그것이 자동으로 사용자 ID를 부여 기입해야합니다.이 두 작업을 위해 SQL 코드를 무엇

?

감사

을 처음 들어

답변

1

, 당신은 할 수 있습니다 :

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

모르겠다는 COLB이기 때문에 당신이 귀하의 질문에 "와"b를 입력 "만약 COLB> 0"에서 지정하는 방법을 확인하는 경우 당신이 쓰고 싶은 컬럼.

두 번째 질문의 경우보기를 사용하여 테이블 Docs에 사용자 이름을 지정해야합니다. 어쨌든 업데이트하려면 다음을 사용할 수 있습니다 : Docs에서 열 Username을 삭제

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

첫째 : 여기

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

는 사용자 이름이 포함 된 뷰를 생성하는 방법이다. 당신이 문서를 선택하고자 할 때

지금, 당신은 너무 사용자 이름을 볼 수

SELECT * FROM Docs_view 

을 그리고 당신은 새 레코드를 추가 할 때, 당신은 단지 UserID를 지정해야합니다.

+0

그게 내가 궁금해했던 것이고, 그는'colA> 0'을 의미 했습니까? –

+0

예, 죄송합니다. 감사합니다! – aneuryzm

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

는 문서 이제까지 사용자 ID와 사용자 이름을 변경한다면 그들이 동기화를 유지하도록 업데이트됩니다 있도록 '업데이트 후', '갱신'에 '삽입'모든 변경에 대한 유사한 트리거를 만듭니다.

관련 문제