J'ai cette déclaration simple qui fonctionne:
SELECT idnumber FROM dbo.database WHERE number = '9823474'
Si le numéro n'existe nulle part dans la table, il échoue. Je voudrais ajouter quelque chose à cette déclaration qui dit:
SI AUCUN ENREGISTREMENT IS TROUVÉ RETOURNE NUL AU LIEU DE AUCUNE LIGNE.
Aucune suggestion?
Encapsulez la requête dans une sous-requête pour transformer "aucune ligne" en une valeur NULL.
J'ai testé et vérifié cela avec PostgreSQL , SQL Server et MySQL . Fonctionne également avec SQLite .
SELECT (SELECT id FROM tbl WHERE id = 9823474) AS id;
Dans Oracle vous devez sélectionner dans la table factice à une ligne DUAL
comme ceci:
SELECT (SELECT id FROM tbl WHERE id = 9823474) AS id FROM DUAL;
Vous pouvez faites la même chose dans MySQL pour des raisons de compatibilité, mais vous n'y êtes pas obligé.
Similaire dans Firebird :
SELECT (SELECT id FROM tbl WHERE id = 9823474) AS id FROM RDB$DATABASE;
Ceci le fait pour DB2 (comme commenta Sean ):
SELECT (SELECT id FROM tbl WHERE id = 9823474) AS id FROM SYSIBM.SYSDUMMY1;
UNION ALL
SELECT id FROM tbl WHERE id = 9823474
UNION ALL
SELECT NULL -- FROM DUAL -- for Oracle
FETCH FIRST 1 ROW ONLY;
Le SQL standard, mais je n'ai testé cela qu'avec Postgres, qui se présente comme suit:
Si une ligne est trouvée dans la première SELECT
, elle est renvoyée. Postgres cesse de rechercher plus de lignes dès que la première est trouvée en raison de LIMIT 1
(FETCH FIRST 1 ROW ONLY
).
La seconde SELECT
n'est exécutée que si la première ne renvoie rien. Le type de données de la valeur NULL est déterminé automatiquement par le type de données tbl.id
.
À propos de la clause LIMIT
:
Pour simplifier les choses, cela devrait fonctionner correctement. Si vous affectez cela à une variable basée sur le type de données de votre idnumber, vous serez en mesure d'évaluer si la valeur est null ou le retour réel idnumber.
SELECT ISNULL(
(
SELECT idnumber
FROM dbo.database
WHERE number = '9823474'
), NULL)
Select isnull(sum(Amount),0) as Amt from BeginningBalance where CustomerID = @CustomerID
Union all
Select isnull(sum(Amount),0) as Amt from SalesOrders where CustomerID = @CustomerID
Union all
Select isnull(sum(Amount),0) as Amt from SalesInvoices where CustomerID = @CustomerID
//Data Row Result if no data is present at Beginning Balance Table
// example
Amt
2000 // amount from sales orders
1000 // amount from sales invoices
// if the 1st select statement return no data use this
SELECT (select sum(Amount) from BeginningBalance
where CustomerID = @CustomerID) as Amt
Union all
Select sum(Amount) as Amt from SalesOrders where CustomerID = @CustomerID
Union all
Select sum(Amount) as Amt from SalesInvoices where CustomerID = @CustomerID
Résultat :
Amt
NULL // amount from BeginningBalance
2000 // amount from sales orders
1000 // amount from sales invoices
Je l'utilise pour MySql
SELECT IFNULL(ColumnA,"1") AS ColumnA , COUNT(1) AS Total FROM table
WHERE ID = 1 LIMIT 0, 1;