여러 행을 반환하는 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
을 사용하여 OrderDetails
및 Supplier
일치를 기반으로 Group_Master
, Supplier_Item
, Sku
및 SupplierId
테이블을 연결합니다. 이렇게 하면 일치하는 행만 결합되어 하위 쿼리가 여러 값을 반환하는 것을 방지할 수 있습니다. si.Price
은 cost
으로 직접 선택되어 각 주문 세부정보에 대한 정확한 가격을 제공합니다. 이 방법은 이 시나리오에서 상관 하위 쿼리를 사용하는 것보다 훨씬 더 효율적이고 읽기 쉽습니다.
위 내용은 내 SQL 하위 쿼리가 '하위 쿼리가 2개 이상의 값을 반환했습니다.' 오류를 반환하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!