需要使用同一数据库中另一个表中的数据填充一个表

时间:2011-09-13 04:48:00

标签: mysql

我正在尝试使用mysql从另一个表填充一个表。第一个表是用户,第二个表是技术人员。

用户包含:userID,surname,firstname,loginid,password,accesslevel。

技术人员包含:techID,tech_surname,tech_firstname,tech_loginid,tech_password,tech_accesslevel。

当我添加用户时,如果accesslevel = tech且users.loginid不等于technicians.tech_loginid,我希望技术人员表填充。

我尝试了几件事,结果就是没有添加记录,或者每次都添加了accesslevel = tech的用户中的所有记录,这给了我几个重复的记录。

我试过了:

INSERT INTO technicians (techID, tech_surname, tech_firstname, tech_loginid, tech_passwrd, tech_accesslevel)
SELECT firstname, surname, loginid, accesslevel, passwrd, tech_loginid
FROM users, technicians
WHERE accesslevel='tech' AND 'loginid!=tech_loginid'

它不起作用,如果我从WHERE子句中删除AND语句,每次添加accesslevel = tech时都会推送所有记录。

我做错了什么?我已经搜索了几个小时的答案。

干杯

2 个答案:

答案 0 :(得分:6)

我认为您正在尝试插入那些已经不存在于该表中的技术人员,因此查询将是这样的

INSERT INTO technicians  (techID, tech_surname, tech_firstname, tech_loginid, tech_passwrd, tech_accesslevel) 
SELECT loginid, surname, firstname, tech_loginid, passwrd, accesslevel 
FROM users 
LEFT OUTER JOIN technicians ON loginid = tech_loginid
WHERE accesslevel='tech' and tech_loginid IS null

答案 1 :(得分:1)

你可以尝试

    INSERT INTO technicians 
(techID, tech_surname, tech_firstname, tech_loginid, tech_passwrd, tech_accesslevel) 
    SELECT 
GetTechId(),surname, firstname, loginid , passwrd, accesslevel  FROM users u
    WHERE
NOT EXISTS (select 1 from technicians t where t.loginid=u.loginid) and 
u.accesslevel='tech'.