2016-11-22 84 views
2

我試圖將此SELECT聲明轉換爲UPDATE聲明,但它太難了。我甚至不知道在更新時是否可以保留INNER JOIN,所以我認爲我需要來自SQL天才的一些幫助。SQL選擇更新

我需要更新我的客戶ID上liste_objectif它是空的,我對客戶表此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

您可以使用JOIN在更新這樣(我不知道你列的名稱在liste_objectifs設置,所以我把它命名爲your_customer_id_column)

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

謝謝你的回答! –