2013-09-01 574 views
1

我有兩個表醫生與* DOC_ID *,並從一個表中刪除* DOC_NAME *和病人帶*號的p_id * DOC_ID *外鍵和* p_name *,我想刪除從患者那裏將匹配DOC_NAME =「pardeep」的所有記錄,這裏是我的查詢使用連接兩個表

DELETE FROM `doctor` , `patient` WHERE 
doctor.doc_id=patient.doc_id and doctor.doc_name='pardeep'; 

回答

3

你是關閉。你必須告訴你先刪除什麼,然後再從哪些表中刪除。

DELETE Syntax
DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
tbl_name[.*] [, tbl_name[.*]] ...
FROM table_references

正確的查詢可能看起來像這樣

DELETE p 
    FROM patient p JOIN doctor d 
    ON p.doc_id = d.doc_id 
WHERE d.doc_name = 'pardeep'; 

這裏是SQLFiddle演示

在一個側面說明:考慮使用顯式ANSI JOIN語法,而不是隱式的(昏迷)之一。

+0

:)是啊@peterm我現在明白了。 – user2736878

+0

太好了。我很高興我可以幫助:) – peterm

3

你可以只是一個IN條款(甚至=)使用子查詢。

delete from patient where doc_id in 
(select doc_id from doctor where doc_name = 'pardeep'); 

如果使用IN,這意味着你的子查詢可以返回不止一個結果(所以也許不止一個DOC_ID)。

如果您使用=,如果子查詢返回多個結果,則查詢將失敗。

+0

也許你應該警告使用IN而不是= – Itay

+0

的可能後果poser我知道了,但我特別想使用連接。 – user2736878