1

*doc_id* と *doc_name* を持つ医師と *p_id* *doc_id* 外部キーと *p_name* を持つ患者の 2 つのテーブルがあり、doc_name='pardeep' に一致するすべてのレコードを患者から削除したいと考えています。私の質問です

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

2 に答える 2

4

サブクエリを使用して、IN句 (または )だけを使用できます。=

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

を使用INすると、サブクエリが複数の結果を返すことができることを意味します (おそらく複数の doc_id)。

を使用する=と、サブクエリが複数の結果を返すと、クエリは失敗します。

于 2013-09-01T07:44:14.113 に答える
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のデモです

JOIN余談ですが、暗黙的な (coma) 構文ではなく、明示的な ANSI 構文を使用することを検討してください。

于 2013-09-01T07:46:12.207 に答える