2011-07-06 105 views
0

我需要一個針對PHP的查詢或一個想法。SQL QUERY(在兩個表之間刪除)

我有兩個表:

新聞

ID MAME 
-------- 
1 Test 
2 Test1 
3 Test2 
4 Test3 
7 Test3 

產品

ID NAME PRICE 
------------- 
1 Test 11 
9 Test2 22 
8 Test4 122 

我需要從產品,其中ID不存在新聞刪除記錄。

有人可以幫我一些想法嗎?

謝謝你的時間!

+3

在'Products'表的'News'表上做一個RIGHT JOIN,並檢查'News.ID = Null'。另見http://stackoverflow.com/questions/2973558/select-a-value-where-it-doesnt-exist-in-another-table –

+0

好的,謝謝。我現在就試試 –

回答

1
DELETE Products 
FROM Products 
    LEFT JOIN News 
    USING (ID) 
WHERE News.ID IS NULL; 

如果你想檢查從產品中刪除了什麼,請使用Paul首先使用select的優秀建議。

因此,與

SELECT * 
FROM Products 
    LEFT JOIN News 
    USING (ID) 
WHERE News.ID IS NULL; 

檢查並切換回

DELETE Products 
FROM Products 
    LEFT JOIN News 
    USING (ID) 
WHERE News.ID IS NULL; 

如果您滿意的結果。這是重要DELETE Products FROM而不是DELETE FROM,否則將從兩個表中刪除。

+0

他想刪除FROM產品,而不是新聞。這會繼續嗎? –

+1

是的,DELETE Products FROM [table_reference]意味着它只會刪除products表中的行。基本上,來自加入的結果集合中的產品的所有行將被刪除,新聞中的任何內容都將被刪除。 – JustDanyul

+1

http://dev.mysql.com/doc/refman/5.0/en/delete.html,查看在DELETE語句中執行連接的示例:)查找「對於第一個多表語法,只匹配從FROM子句之前列出的表中的行將被刪除。「在頁面上:) – JustDanyul

3

嘗試SELECT * FROM PRODUCTS WHERE ID NOT IN (SELECT ID FROM NEWS)

,如果這個工程然後更改SELECT *DELETE 這是很好的做法,嘗試選擇,以確保您得到正確的數據在刪除之前。