web-dev-qa-db-ja.com

レコードが見つからない場合は値を返します

動作するこの簡単なステートメントがあります。

SELECT idnumber FROM dbo.database WHERE number = '9823474'

番号がテーブル内のどこにも存在しない場合、失敗します。この声明に次のようなことを追加したいと思います。
IF NO RECORD IS行のないNULLの戻り値が見つかりました。

助言がありますか?

36
user1042304

サブクエリでクエリをカプセル化し、「行なし」をNULL値に変換します。

PostgreSQLSQL 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 1FETCH FIRST 1 ROW ONLY)が原因で、最初の行が見つかるとすぐに、Postgresはそれ以上の行の検索を停止します。
2番目のSELECTは、1番目が何も返さない場合にのみ実行されます。 NULL値のデータ型は、tbl.idのデータ型によって自動的に決定されます。

LIMIT句について:

58

より簡単にするために、これはうまくいくはずです。これをidnumberのデータ型に基づいて変数に割り当てると、値がnullか実際のidnumberが返されるかを評価できます。

SELECT ISNULL(
      (
         SELECT idnumber 
         FROM dbo.database 
         WHERE number = '9823474'
      ), NULL)
6
Sam Kort
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
3
Wilson

これをMySqlに使用します

SELECT IFNULL(ColumnA,"1") AS ColumnA , COUNT(1) AS Total FROM table 
WHERE ID = 1 LIMIT 0, 1;
0
Irfan Ashraf