web-dev-qa-db-fra.com

Remplacer les valeurs nulles par défaut renvoyées par la jointure externe gauche

J'ai une requête Microsoft SQL Server 2008 qui renvoie les données de trois tables à l'aide d'une jointure externe gauche. Souvent, il n’ya pas de données dans les deuxième et troisième tables et j’obtiens donc un null qui, je pense, est la valeur par défaut pour la jointure externe gauche. Est-il possible de remplacer les valeurs par défaut dans l'instruction select? J'ai une solution de contournement en ce que je peux sélectionner une variable de table mais elle semble un peu sale.

SELECT iar.Description, iai.Quantity, iai.Quantity * rpl.RegularPrice as 'Retail', 
iar.Compliance FROM InventoryAdjustmentReason iar
LEFT OUTER JOIN InventoryAdjustmentItem iai  on (iar.Id = iai.InventoryAdjustmentReasonId)
LEFT OUTER JOIN Item i on (i.Id = iai.ItemId)
LEFT OUTER JOIN ReportPriceLookup rpl on (rpl.SkuNumber = i.SkuNo)
WHERE iar.StoreUse = 'yes'

Je voudrais que la quantité et RegularPrice à zéro par défaut si possible.

84
Brett Bim

C'est aussi simple que

IsNull(FieldName, 0)

Ou plus complètement:

SELECT iar.Description, 
  ISNULL(iai.Quantity,0) as Quantity, 
  ISNULL(iai.Quantity * rpl.RegularPrice,0) as 'Retail', 
  iar.Compliance 
FROM InventoryAdjustmentReason iar
LEFT OUTER JOIN InventoryAdjustmentItem iai  on (iar.Id = iai.InventoryAdjustmentReasonId)
LEFT OUTER JOIN Item i on (i.Id = iai.ItemId)
LEFT OUTER JOIN ReportPriceLookup rpl on (rpl.SkuNumber = i.SkuNo)
WHERE iar.StoreUse = 'yes'
126
Michael Haren

Dans le cas de MySQL ou SQLite, le mot clé correct est IFNULL (et non ISNULL).

 SELECT iar.Description, 
      IFNULL(iai.Quantity,0) as Quantity, 
      IFNULL(iai.Quantity * rpl.RegularPrice,0) as 'Retail', 
      iar.Compliance 
    FROM InventoryAdjustmentReason iar
    LEFT OUTER JOIN InventoryAdjustmentItem iai  on (iar.Id = iai.InventoryAdjustmentReasonId)
    LEFT OUTER JOIN Item i on (i.Id = iai.ItemId)
    LEFT OUTER JOIN ReportPriceLookup rpl on (rpl.SkuNumber = i.SkuNo)
WHERE iar.StoreUse = 'yes'
6
Zendem

MySQL

COALESCE(field, 'default')

Par exemple:

  SELECT
    t.id,
    COALESCE(d.field, 'default')
  FROM
     table t
  LEFT JOIN
     detail d ON t.id = d.item

Vous pouvez également utiliser plusieurs colonnes pour vérifier leur fonction NULL par COALESCE . Par exemple:

mysql> SELECT COALESCE(NULL, 1, NULL);
        -> 1
mysql> SELECT COALESCE(7, 1, NULL);
        -> 7
mysql> SELECT COALESCE(NULL,NULL,NULL);
        -> NULL
3
Amir Forsati