我有兩個表醫生與* 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';
我有兩個表醫生與* 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';
你是很關閉。你必須告訴你先刪除什麼,然後再從哪些表中刪除。
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
語法,而不是隱式的(昏迷)之一。
你可以只是一個IN
條款(甚至=
)使用子查詢。
delete from patient where doc_id in
(select doc_id from doctor where doc_name = 'pardeep');
如果使用IN
,這意味着你的子查詢可以返回不止一個結果(所以也許不止一個DOC_ID)。
如果您使用=
,如果子查詢返回多個結果,則查詢將失敗。
也許你應該警告使用IN而不是= – Itay
的可能後果poser我知道了,但我特別想使用連接。 – user2736878
:)是啊@peterm我現在明白了。 – user2736878
太好了。我很高興我可以幫助:) – peterm