복붙노트

[SQL] 어떤 레코드가 발견되지 않으면 값을 반환

SQL

어떤 레코드가 발견되지 않으면 값을 반환

나는 작동이 간단한 문이 :

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

수는 테이블의 아무 곳이나 존재하지 않는 경우, 실패합니다. 나는 말한다이 문에 뭔가를 추가하고 싶습니다 : IF NO RECORD는 RETURN NULL INSTEAD OF NO ROW를 알 수있다.

어떤 제안?

해결법

  1. ==============================

    1.NULL 값에 "더 행"을 변환하지 않으려면 하위 쿼리에서 쿼리를 캡슐화합니다.

    NULL 값에 "더 행"을 변환하지 않으려면 하위 쿼리에서 쿼리를 캡슐화합니다.

    나는 시험과 PostgreSQL, SQL Server와 MySQL과 연동이 확인했습니다. 또한 SQLite는 함께 작동합니다.

    SELECT (SELECT id FROM tbl WHERE id = 9823474) AS id;
    

    오라클에서는이 같은 더미 1 행 테이블 DUAL에서 선택해야합니다 :

    SELECT (SELECT id FROM tbl WHERE id = 9823474) AS id FROM DUAL;
    

    당신은 호환성을 위해 MySQL의에서 같은 작업을 수행 할 수 있습니다,하지만 당신은 필요가 없습니다. 파이어 비슷한 :

    SELECT (SELECT id FROM tbl WHERE id = 9823474) AS id FROM RDB$DATABASE;
    

    이것은 DB2 (숀 주석 같은)을 위해 작업을 수행합니다

    SELECT (SELECT id FROM tbl WHERE id = 9823474) AS id FROM SYSIBM.SYSDUMMY1;
    
    SELECT id FROM tbl WHERE id = 9823474
    UNION  ALL
    SELECT NULL -- FROM DUAL  -- for Oracle
    FETCH FIRST 1 ROW ONLY;
    

    표준 SQL,하지만 난 단지 다음과 같이 평가 포스트 그레스와이 테스트 : 행이 첫 번째 SELECT에서 발견되는 경우가 반환됩니다. 포스트 그레스는 즉시 첫째 인해 LIMIT 1로 발견으로 (FIRST 1 ROW 만 FETCH) 이상의 행을 찾고 중지합니다. 두 번째 SELECT는 심지어 첫 번째 아무것도 반환하면 실행됩니다. NULL 값의 데이터 유형은 자동 tbl.id의 데이터 유형에 의해 결정된다.

    한계 절 소개 :

  2. ==============================

    2.그것보다 더 간단하려면이 잘 작동합니다. 당신이 당신의 idnumber의 데이터 유형에 따라 변수에이를 할당하는 경우에는 값이 null 또는 실제 idnumber 반환 여부를 평가할 수있을 것보다.

    그것보다 더 간단하려면이 잘 작동합니다. 당신이 당신의 idnumber의 데이터 유형에 따라 변수에이를 할당하는 경우에는 값이 null 또는 실제 idnumber 반환 여부를 평가할 수있을 것보다.

    SELECT ISNULL(
          (
             SELECT idnumber 
             FROM dbo.database 
             WHERE number = '9823474'
          ), NULL)
    
  3. ==============================

    3.

    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
    
  4. ==============================

    4.내가 MySQL을 위해 이것을 사용

    내가 MySQL을 위해 이것을 사용

    SELECT IFNULL(ColumnA,"1") AS ColumnA , COUNT(1) AS Total FROM table 
    WHERE ID = 1 LIMIT 0, 1;
    
  5. from https://stackoverflow.com/questions/8098795/return-a-value-if-no-record-is-found by cc-by-sa and MIT license