3

次のSQLステートメントは私のデータベースで正常に実行されます。

SELECT * FROM tblKPIs AS k 
INNER JOIN tblKeyPointLinks AS l ON k.KPIID = l.KPIID 
INNER JOIN tblKeyPoints AS p ON p.KptID = l.KptID 
INNER JOIN tblHistory AS h ON h.HistoryID = p.HistoryID 
WHERE h.CaseNo = 50043;

それでも、同等のDeleteステートメントはエラー「ASに近い構文」を与えますか?

DELETE FROM tblKPIs AS k 
INNER JOIN tblKeyPointLinks AS l ON k.KPIID = l.KPIID 
INNER JOIN tblKeyPoints AS p ON p.KptID = l.KptID 
INNER JOIN tblHistory AS h ON h.HistoryID = p.HistoryID 
WHERE h.CaseNo = 50043;

Deleteステートメントで結合を使用できませんか?

そうでない場合、上記の削除を実行するにはどうすればよいですか?

編集

テーブルtblKeyPointLinksは、tblKPIとtblKeyPointsの間に多対多の関係を確立するための中間テーブルです。したがって、SELECTステートメントはtblKPIの一部のエントリを複数回返します。これが、DELETEステートメントで問題が発生している理由ですか?これを回避するための最良の方法は何ですか?

4

3 に答える 3

5

はい、削除ステートメントに参加できます。

DELETE k FROM tblKPIs AS k 
INNER JOIN tblKeyPointLinks AS l ON k.KPIID = l.KPIID 
INNER JOIN tblKeyPoints AS p ON p.KptID = l.KptID 
INNER JOIN tblHistory AS h ON h.HistoryID = p.HistoryID 
WHERE h.CaseNo = 50043;
于 2012-07-30T00:46:24.523 に答える
2

あなたはただすることができます:

DELETE FROM tblKPIs 
  WHERE id in (
    SELECT id 
      FROM tblKPIs AS k 
      INNER JOIN tblKeyPointLinks AS l ON k.KPIID = l.KPIID 
      INNER JOIN tblKeyPoints AS p ON p.KptID = l.KptID 
      INNER JOIN tblHistory AS h ON h.HistoryID = p.HistoryID 
      WHERE h.CaseNo = 50043)
于 2012-07-30T00:41:06.777 に答える
2

成功したコードは次のとおりです。

DELETE k
FROM tblKPIs k  
     INNER JOIN tblKeyPointLinks l ON k.KPIID = l.KPIID
     INNER JOIN tblKeyPoints p ON p.KptID = l.KptID
     INNER JOIN tblHistory h ON h.HistoryID = p.HistoryID
WHERE h.CaseNo = 50043; 

どうやらDELETEステートメントはキーワードの使用を好まないようです。キーワードAS を単に省略することによってAS、ステートメントはうまく機能します。

于 2012-07-30T08:54:11.330 に答える