> 데이터 베이스 > MySQL 튜토리얼 > 내 SQL 하위 쿼리가 '하위 쿼리가 2개 이상의 값을 반환했습니다.' 오류를 반환하는 이유는 무엇입니까?

내 SQL 하위 쿼리가 '하위 쿼리가 2개 이상의 값을 반환했습니다.' 오류를 반환하는 이유는 무엇입니까?

Linda Hamilton
풀어 주다: 2025-01-17 15:06:10
원래의
161명이 탐색했습니다.

Why Does My SQL Subquery Return a

여러 행을 반환하는 SQL Server 하위 쿼리: 문제 해결 및 솔루션

다음 SQL 쿼리는 두 개 이상의 값을 반환하는 하위 쿼리로 인해 오류가 발생하는 일반적인 문제를 보여줍니다.

<code class="language-sql">SELECT 
   orderdetails.sku,
   orderdetails.mf_item_number,
   orderdetails.qty,
   orderdetails.price,
   supplier.supplierid,
   supplier.suppliername,
   supplier.dropshipfees,
   cost = (SELECT supplier_item.price
           FROM   supplier_item,
                  orderdetails,
                  supplier
           WHERE  supplier_item.sku = orderdetails.sku
                  AND supplier_item.supplierid = supplier.supplierid)
FROM   orderdetails,
       supplier,
       group_master
WHERE  invoiceid = '339740'
       AND orderdetails.mfr_id = supplier.supplierid
       AND group_master.sku = orderdetails.sku  </code>
로그인 후 복사

이 쿼리를 실행하면 다음 오류가 발생합니다. "하위 쿼리가 2개 이상의 값을 반환했습니다. 이는 하위 쿼리가 =, !=, <, >, >= 다음에 나오거나 하위 쿼리가 표현식으로 사용되는 경우 허용되지 않습니다. ."

문제: 여러 행 하위 쿼리 결과

하위 쿼리 (SELECT supplier_item.price...)가 여러 price 값을 반환할 수 있기 때문에 오류가 발생합니다. 이는 WHERE 절이 각 supplier_item 레코드에 대해 단일 orderdetails 레코드를 고유하게 식별하지 않기 때문입니다. 이런 방식으로 사용되는 하위 쿼리에는 모호하지 않은 단일 결과가 필요합니다.

해결책: 효율적인 데이터 검색을 위해 JOIN 사용

효율적이고 올바른 접근 방식은 하위 쿼리를 명시적인 JOIN 작업으로 바꾸는 것입니다.

<code class="language-sql">SELECT
    od.Sku,
    od.mf_item_number,
    od.Qty,
    od.Price,
    s.SupplierId,
    s.SupplierName,
    s.DropShipFees,
    si.Price as cost
FROM
    OrderDetails od
    INNER JOIN Supplier s on s.SupplierId = od.Mfr_ID
    INNER JOIN Group_Master gm on gm.Sku = od.Sku
    INNER JOIN Supplier_Item si on si.SKU = od.Sku and si.SupplierId = s.SupplierID
WHERE
    od.invoiceid = '339740'</code>
로그인 후 복사

이 수정된 쿼리는 INNER JOIN을 사용하여 OrderDetailsSupplier 일치를 기반으로 Group_Master, Supplier_Item, SkuSupplierId 테이블을 연결합니다. 이렇게 하면 일치하는 행만 결합되어 하위 쿼리가 여러 값을 반환하는 것을 방지할 수 있습니다. si.Pricecost으로 직접 선택되어 각 주문 세부정보에 대한 정확한 가격을 제공합니다. 이 방법은 이 시나리오에서 상관 하위 쿼리를 사용하는 것보다 훨씬 더 효율적이고 읽기 쉽습니다.

위 내용은 내 SQL 하위 쿼리가 '하위 쿼리가 2개 이상의 값을 반환했습니다.' 오류를 반환하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿