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.
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'
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'
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