如果值尚不存在,则插入连接表

时间:2016-08-11 11:47:32

标签: sql junction-table

我有2个表 - 用户,区域和用于连接用户和区域的连接/连接表。

我需要在连接表中插入用户尚未拥有的所有区域值,我不确定如何解决这个问题。

我尝试过这么多种方法,但我不完全确定如何只将表中已存在的值放入连接表中。有没有人有任何想法或建议?

SELECT 
    CONVERT( CONCAT('INSERT INTO user_region VALUES(',
        user.id,
        ',',
        reg.id,
        ');') USING UTF8)
FROM
   user user
      JOIN
        user_region user_reg ON user_reg.id = user.id
      JOIN
        region reg ON reg.id = user_reg.id
WHERE 
   (user.email_address LIKE '%gmail%'
    OR user.email_address LIKE '%hotmail%');


 User Table                User Region             Region
 -----------               -----------             ------
 1                          1        2             1
 2                          3        2             2
 3                          3        4             3
 4                          4        3             4

1 个答案:

答案 0 :(得分:0)

有点

INSERT INTO user_region (userID, regionID)
SELECT u.userID, r.regionID
FROM
(SELECT DISTINCT userId 
FROM user 
WHERE user.email_address LIKE '%gmail%'
    OR user.email_address LIKE '%hotmail%') u
JOIN region r ON NOT EXISTS (
     SELECT 1 
     FROM user_region ur
     WHERE ur.userID = u.userID AND ur.regionID = r.regionID )