2017-04-27 20 views
0

我想更新我的表像如何更新表格通過下列圖片?

關係A.id = B.a_id enter image description here

+0

不是我的downvote,但最有可能的是給予downvote,因爲你沒有表現出任何努力來解決你的問題。 –

+0

請參閱https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql-查詢 – Strawberry

+0

@Strawberry downvoter顯示:-P –

回答

2

對於MySQL:

UPDATE B 
JOIN A ON B.email = A.email 
AND B.a_id = A.id 
SET B.email = ''; 

UPDATE B 
JOIN (
    SELECT * 
    FROM B 
    GROUP BY email, a_id 
    HAVING COUNT(*) > 1 
) AS dp ON B.email = dp.email 
AND B.a_id = dp.a_id 
AND B.id != dp.id 
SET B.email = ''; 
1

第一種情況,當表A中存在的郵箱:

update table_b b set email = '' where (select 1 from table_a a where a.email = b.email) = 1; 

接下來的情況下,當電子郵件在表B中複製時:

update table_b b set email = '' where b.id in 
(select 
    bb.id 
    from table_b bb 
    where bb.email in (
     select bbb.email,count(*) 
     from table_b bbb 
     where bbb.email = b.email 
     having count(*) > 1 
    ) 
    limit 1 
) 
1

一個簡單的inner join會做的伎倆

UPDATE TableB 
SET EMAIL='' --or set this to null 
FROM TableA 
INNER JOIN TableB ON 
TableA.id = TableB.a_id AND 
TableA.email = TableB.email 

何至於在同一個表,即表B更新重複我會選擇CTERow_number

WITH CTE AS(
    SELECT id,a_id,email, 
     RN = ROW_NUMBER()OVER(PARTITION BY a_id,email ORDER BY id) 
    FROM TableB 
) 
UPDATE CTE SET email='' WHERE RN > 1