0
votes

Résultat vide lors de la requête SQL

Je veux un rapport avec les marques qui n'ont aucune vente pour une période spécifique. Voici ce que j'ai essayé jusqu'à présent, mais je reçois une colonne vide brand_name code>.

SELECT DISTINCT 
    Brands$.BRAND_NAME
FROM
    Brands$
INNER JOIN 
    Products$ ON Brands$.BRAND_ID = Products$.BRAND_ID
LEFT JOIN 
    InvDetails$ ON Products$.PRODUCT_ID = InvDetails$.PRODUCT_ID
INNER JOIN 
    Invoices$ ON Invoices$.INVOICE_ID = InvDetails$.INVOICE_ID
WHERE 
    InvDetails$.PRODUCT_ID IS NULL 
    AND (Invoices$.INVOICE_DATE BETWEEN '2013-10-22 23:41:49.143' 
                                    AND '2013-11-22 17:54:03.437')


2 commentaires

mettre à jour un échantillon de données approprié et le résultat attendu


commentaire où les clauses de voir quelle est la cause, faites la même chose avec des jointures si aucune joie.


6 Réponses :


0
votes

Vous devez déplacer la condition de la table de jointure gauche sur la clause xxx

si vous utilisez où vous utilisez la colonne liée à la table de jointure gauche, ouvrez-la comme une jointure interne >


0 commentaires

0
votes

Je pense que vous avez juste besoin de deux rejoindre s et pour déplacer la condition sur les factures vers la clause sur ; xxx

table Les alias rendent la requête plus facile à écrire et à lire.


0 commentaires

0
votes

avec ceci:

SELECT Brands$.BRAND_NAME
FROM Brands$
EXCEPT
SELECT DISTINCT Brands$.BRAND_NAME
FROM Brands$
INNER JOIN Products$ ON Brands$.BRAND_ID = Products$.BRAND_ID
INNER JOIN InvDetails$ ON Products$.PRODUCT_ID = InvDetails$.PRODUCT_ID
INNER JOIN Invoices$ ON Invoices$.INVOICE_ID = InvDetails$.INVOICE_ID
WHERE Invoices$.INVOICE_DATE BETWEEN '2013-10-22 23:41:49.143' AND '2013-11-22


0 commentaires

0
votes

Lorsque vous essayez de trouver des enregistrements d'une table sans enregistrements correspondants dans une autre table (s), n'existe pas code> fonctionnera mieux sur SQL Server que JOIN \ est null code > , en outre, je trouve que cela transmet une intention beaucoup plus clairement, par exemple

SELECT  b.BRAND_NAME
FROM    Brands$ AS b
WHERE   NOT EXISTS
        (   SELECT  1
            FROM    Products$ AS p
                    INNER JOIN InvDetails$ AS id
                        ON id.PRODUCT_ID = p.PRODUCT_ID
                    INNER JOIN Invoices$ AS i
                        ON i.INVOICE_ID = id.INVOICE_ID
            WHERE   i.INVOICE_DATE BETWEEN '2013-10-22 23:41:49.143' AND '2013-11-22 17:54:03.437'
            WHERE   p.BRAND_ID = b.BRAND_ID
        );


0 commentaires

0
votes

J'utilise n'existe pas pour exclure les marques avec des factures pour la période donnée

SELECT DISTINCT b.BRAND_NAME
FROM Brands$ b
INNER JOIN Products$ p ON b.BRAND_ID=p.BRAND_ID
WHERE NOT EXISTS(SELECT 1 
                 FROM Invoices$ i
                 JOIN InvDetails$ id ON i.INVOICE_ID = id.INVOICE_ID
                 WHERE i.INVOICE_DATE BETWEEN '2013-10-22 23:41:49.143' AND '2013-11-22 17:54:03.437'
                   AND id.PRODUCT_ID = p.PRODUCT_ID)


0 commentaires

0
votes

Trouvez des marques avec facture et excluez. xxx

au lieu de la marque, un identifiant numérique doit être plus rapide à comparer.


0 commentaires