考慮以下三個MySQL表更新tweets.spam柱:通過連接一個或兩個其他表
tweets urls tweets_urls
--------------------------- --------------------- ----------------
tweet_id text spam url_id host spam tweet_id url_id
--------------------------- --------------------- ----------------
1 I love cnn.com 0 16 cnn.com 0 1 16
2 fox.com is fuk 0 17 fox.com 1 2 17
3 love me! 0 4 16
4 blah cnn.com 0
5 nice fox.com 0
我想根據tweets_urls更新tweets.spam,這意味着查詢的輸出應該是
tweets
---------------------------
tweet_id text spam
---------------------------
1 I love cnn.com 0 <-- tweets_urls tells me tweet_id 1 has url_id 16
2 fox.com is fuk 1 in it, and the urls-table tells me that url 16
3 love me! 0 is not spam (spam = 0)
4 blah cnn.com 0
5 nice fox.com 1
我希望自己清楚。我一直在擺弄它,現在有這樣的事情。我知道這不可能是正確的,但不知道如何重新開始。你做?
UPDATE tweets SET spam = (
SELECT spam FROM urls
LEFT JOIN tweets_urls
WHERE urls.url_id = tweets_urls.url_id
)
任何幫助,將不勝感激:-)
因此,如果我理解正確,如果tweets-table有一行文本不包含與urls-table中任何url匹配的URL,tweets.spam設置爲零(0)?這是我的想法,然後它會被留下,因爲tweets.spam在這種情況下已經設置爲0(參見默認表,其中tweets.spam = 0,對於所有行) – Pr0no 2012-07-10 19:57:53
@ Pr0no:是的。我已經更新了我的答案,添加了另一個語句,只更新當前垃圾郵件= 0,應該設置爲垃圾郵件= 1(根據與垃圾郵件= 1匹配的網址)的行。哪一個最適合你。這就是爲什麼我小心地解釋原始查詢正在做什麼,在推文的每一行上設置垃圾郵件。在MySQL中,分配與當前值相同的值的更新不會真正修改該行。 (這與Oracle等其他數據庫不同,它記錄了與更改相同值的分配。) – spencer7593 2012-07-10 20:09:26