2012-10-04 2 views
0

J'ai la base de données suivante pour l'utiliser dans une application tablette Android 3.0. Je veux sélectionner tous les défauts sur lesquels il n'est pas EReportDefect. Comme vous pouvez le voir EReportDefect.defectIdpourrait être nul.Sélectionnez les lignes d'une table qui ne sont pas dans une autre avec une clé étrangère NULL

Cette sélection renvoie 0 ligne. Mais il y a des défauts qui ne sont pas sur le tableau EReportDefect.

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

Qu'est-ce que je fais mal?

Répondre

0

Voilà comment je fais des œuvres:

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

Vous pouvez joindre à la fois la table sur la colonne à l'aide defectIDLEFT JOIN,

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

b.defectID aura NULL valeurs si elle n'a aucune correspondance avec le a.defectID.

MISE À JOUR 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 = ? 
+0

Merci pour votre réponse. Je vais l'utiliser sur une base de données SQLite 3 sur une application Android. Cela fonctionnera-t-il sur SQLite 3? – VansFannel

+0

Et aussi je dois passer les valeurs qapId et eReportId. Comment puis-je le faire? – VansFannel

+1

Je viens de mettre à jour la réponse. Oui, ça marchera sur SQLite3 –

-1

Peut-être que je manque quelque chose, mais pour moi, il semble si vous supprimez "qapId = ET" et "Où eReportId =?" il devrait simplement renvoyer des résultats où il n'y a pas d'entrée dans le tableau EReportDefect

SELECT 
    Defect.defectId, 
    Defect.description 
FROM 
    Defect 
WHERE 
    defectId NOT IN 
    (SELECT defectId FROM EReportDefect); 
Questions connexes