0

Android 3.0 タブレット アプリケーションで使用する次のデータベースがあります。

ここに画像の説明を入力
オンになっていないすべての欠陥を選択したいEReportDefect。ご覧のとおりEReportDefect.defectId 、 null の可能性があります

この選択は 0 行を返します。しかし、表に出ていない欠陥がありEReportDefectます。

SELECT 
  Defect.defectId,
  Defect.description
FROM 
  Defect 
WHERE 
   qapId = ? AND
   defectId NOT IN 
     (SELECT defectId FROM EReportDefect WHERE eReportId = ?);

私は何を間違っていますか?

4

3 に答える 3

3

defectIDを使用してLEFT JOIN、列の両方のテーブルを結合できます。

SELECT  a.*
FROM    Defect a
        LEFT JOIN EReportDefect b
            ON a.defectID = b.defectID
WHERE   b.defectID IS NULL 

b.defectIDNULLに一致するものがない場合、 は値を持ちますa.defectID

更新 1

SELECT a.*
FROM    Defect a
        LEFT JOIN EReportDefect b
            ON a.defectID = b.defectID
WHERE  b.defectID IS NULL AND
        a.qapID = ? 
       -- AND b.ReportID = ?
于 2012-10-04T15:37:51.537 に答える
0

これは私が作品を作る方法です:

SELECT
   Defect.defectId,
   Defect.description
FROM
   Defect
WHERE
   qapId = ? AND
   defectId NOT IN 
     (SELECT
        defectId
      FROM
        EReportDefect
      WHERE eReportId = ? AND defectId IS NOT NULL);
于 2012-10-04T16:09:21.980 に答える
-1

多分私は何かが欠けているかもしれませんが、「qapId = ? AND」と「WHERE eReportId = ?」を削除すると、私には見えます。EReportDefect テーブルにエントリがない場合にのみ結果を返す必要があります

SELECT 
  Defect.defectId,
  Defect.description
FROM 
  Defect 
WHERE 
   defectId NOT IN 
     (SELECT defectId FROM EReportDefect);
于 2012-10-04T15:48:10.860 に答える