2016-11-22 5 views
2

私はこのSELECTステートメントをUPDATEステートメントに変換しようとしていますが、それは難しいです。更新中にINNER JOINを保存できるかどうかわからないので、SQLの天才から助けが必要だと思います。SQL更新を選択してください

私はそれがNULLだliste_objectifに私の顧客IDを更新する必要がある、と私は(メールで)顧客テーブルの上にこのIDを持っている

SELECT DISTINCT * 
FROM liste_objectifs l 
INNER JOIN customers c ON (l.email = c.customer_email) 
WHERE c.customer_id 
IN (
    SELECT customer 
    FROM newsletters_inscriptions 
    WHERE liste 
    IN (786, 878, 874, 875, 876, 877) 
) 
AND c.customer_id NOT 
IN (
    SELECT customer 
    FROM newsletters_blacklists 
    WHERE newsletter =1 
) 
ORDER BY `l`.`email` ASC 
LIMIT 0 , 30 

ありがとう!

あなたはアップデートに参加この方法を使用することができます
+0

どのdbmsを使用していますか? – jarlh

+2

更新をしようとしていますか?何を設定しようとしていますか?これまでに何を試しましたか?どのSQLの実際のフレーバーを使用していますか? – BishNaboB

+0

私はそれが叫ぶべきだ、私はMYSQLを使用している –

答えて

1

これは近づく:

update liste_objectifs l join 
     customers c 
     on l.email = c.customer_email 
    set l.customer_id = c.customer_id 
where c.customer_id (SELECT customer 
        FROM newsletters_inscriptions 
        WHERE liste IN (786, 878, 874, 875, 876, 877) 
        ) and 
     c.customer_id NOT IN (SELECT customer 
          FROM newsletters_blacklists 
          WHERE newsletter = 1 
          ) and 
     l.customer_id is null; 

order bylimitが実際に必要な場合は、クエリをさらに複雑にする必要があります。マルチテーブル更新ではサポートされていません。

+0

ありがとう、これは答えでした! –

1
Update liste_objectifs l 
INNER JOIN customers c ON (l.email = c.customer_email   ) 
    set l.customer_id=c.id 
WHERE c.customer_id 
IN (
SELECT customer 
FROM newsletters_inscriptions 
WHERE liste 
IN (786, 878, 874, 875, 876, 877) 
) 
AND c.customer_id NOT 
IN (
SELECT customer 
FROM newsletters_blacklists 
WHERE newsletter =1 
) 
and customer_id is null 
1

(私はそれがyour_customer_id_column命名だから私はliste_objectifsに設定することができ、列の名前がわからない)

UPDATE liste_objectifs l 
    INNER JOIN FROM customers c ON l.email = c.customer_email 
    SET liste_objectifs.your_customer_id_column = c.id 
    WHERE c.customer_id 
    IN (
     SELECT customer 
     FROM newsletters_inscriptions 
     WHERE liste 
     IN (786, 878, 874, 875, 876, 877) 
) 
    AND c.customer_id NOT 
    IN (
     SELECT customer 
     FROM newsletters_blacklists 
     WHERE newsletter =1 
) 
+0

あなたの答えをありがとう! –

関連する問題