2016-08-11 14 views
0

ユーザーと地域の両方を結合するために使用されるユーザー、地域、および結合/接続テーブルが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 
+0

LEFT JOINを、条件がreg.IDがNULL IS持ちWHEREでくださいの種類..あなたは、ユーザーが持っていない領域のみを取得します...あなたが表示された場合、そのよう私たちはあなたにさらに役立つことができるいくつかのデータが、これはちょうど私がそれと一緒に行くだろうという考えです – Veljko89

+0

返信いただきありがとうございます。私は完全に私はフォローされていない - だから私はちょうど結合の代わりに左の結合を使用する必要がありますまた、reg.isを参照して確認するために私の状態を変更nullは? –

+0

いくつかのデータ例であなたは投げることができますか? – Veljko89

答えて

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) 
関連する問題