動作するこの簡単なステートメントがあります。
SELECT idnumber FROM dbo.database WHERE number = '9823474'
番号がテーブル内のどこにも存在しない場合、失敗します。この声明に次のようなことを追加したいと思います。
IF NO RECORD IS行のないNULLの戻り値が見つかりました。
助言がありますか?
サブクエリでクエリをカプセル化し、「行なし」をNULL値に変換します。
PostgreSQL 、 SQL Server および MySQLSQLite でも動作します。
SELECT (SELECT id FROM tbl WHERE id = 9823474) AS id;
Oracle では、ダミーの1行テーブルDUAL
から次のように選択する必要があります。
SELECT (SELECT id FROM tbl WHERE id = 9823474) AS id FROM DUAL;
互換性の理由からMySQLで同じことをcanできますが、そうする必要はありません。
同様の Firebird :
SELECT (SELECT id FROM tbl WHERE id = 9823474) AS id FROM RDB$DATABASE;
これは DB2 に対して行います(たとえば Sean commented ):
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;
標準SQLですが、次のように評価されるPostgresでのみテストしました。
最初のSELECT
で行が見つかった場合、それが返されます。 LIMIT 1
(FETCH FIRST 1 ROW ONLY
)が原因で、最初の行が見つかるとすぐに、Postgresはそれ以上の行の検索を停止します。
2番目のSELECT
は、1番目が何も返さない場合にのみ実行されます。 NULL値のデータ型は、tbl.id
のデータ型によって自動的に決定されます。
LIMIT
句について:
より簡単にするために、これはうまくいくはずです。これをidnumberのデータ型に基づいて変数に割り当てると、値がnullか実際の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
結果:
Amt
NULL // amount from BeginningBalance
2000 // amount from sales orders
1000 // amount from sales invoices
これをMySqlに使用します
SELECT IFNULL(ColumnA,"1") AS ColumnA , COUNT(1) AS Total FROM table
WHERE ID = 1 LIMIT 0, 1;