[SQL] SQL 서버 하위 쿼리는 1 개 이상의 값을 반환했습니다. 이 허용되지 않는 서브 쿼리가 다음에 올 때 =,! =, <, <=,>,> =
SQLSQL 서버 하위 쿼리는 1 개 이상의 값을 반환했습니다. 이 허용되지 않는 서브 쿼리가 다음에 올 때 =,! =, <, <=,>,> =
나는 다음과 같은 쿼리를 실행합니다 :
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
나는 다음과 같은 오류가 발생합니다 :
어떤 아이디어?
해결법
-
==============================
1.이 시도:
이 시도:
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'
이 비용 항목을 제외하고 동일한 여러 행을 반환합니다. 반환과 다른 값을 원인을 파악하는 다른 비용 값을 봐. 그리고 그들이 원하는 사람이되는 비용 값을 요청하고, 그 비용을 선택합니다 쿼리에 조건을 추가 할 수 있습니다.
-
==============================
2.당신이에 대해 쿼리를 실행하려고하는 테이블에 어떤 트리거가 있는지 확인하십시오. 그들은 테이블에 트리거 삽입 / / 업데이트를 실행 선택하려고으로 그들은 때때로이 오류가 발생 할 수 있습니다.
당신이에 대해 쿼리를 실행하려고하는 테이블에 어떤 트리거가 있는지 확인하십시오. 그들은 테이블에 트리거 삽입 / / 업데이트를 실행 선택하려고으로 그들은 때때로이 오류가 발생 할 수 있습니다.
당신은 트리거가 실행하려는 어떤 쿼리를 실행해야하지 않는 경우 트리거를 사용하지 않도록 설정하는 쿼리를 수정할 수 있습니다.
ALTER TABLE your_table DISABLE TRIGGER [the_trigger_name] UPDATE your_table SET Gender = 'Female' WHERE (Gender = 'Male') ALTER TABLE your_table ENABLE TRIGGER [the_trigger_name]
-
==============================
3.
SELECT COLUMN FROM TABLE WHERE columns_name IN ( SELECT COLUMN FROM TABLE WHERE columns_name = 'value');
주의 : 우리는 하위 쿼리를 사용할 때 우리는 점에 집중해야
-
==============================
4.
cost = Select Supplier_Item.Price from Supplier_Item,orderdetails,Supplier where Supplier_Item.SKU=OrderDetails.Sku and Supplier_Item.SupplierId=Supplier.SupplierID
이 하위 쿼리는 여러 값을 반환 SQL은 불평이 하나의 레코드에서 비용하지 할당 여러 값을 수 있기 때문이다.
몇 가지 아이디어 :
-
==============================
5.어느 데이터가 나쁜 경우, 또는 당신이 생각하는 방법을 구성 아니에요. 아마 둘 다.
어느 데이터가 나쁜 경우, 또는 당신이 생각하는 방법을 구성 아니에요. 아마 둘 다.
/ 증명이 가설을 반증하기 위해,이 쿼리를 실행 :
SELECT * from ( SELECT count(*) as c, Supplier_Item.SKU FROM Supplier_Item INNER JOIN orderdetails ON Supplier_Item.sku = orderdetails.sku INNER JOIN Supplier ON Supplier_item.supplierID = Supplier.SupplierID GROUP BY Supplier_Item.SKU ) x WHERE c > 1 ORDER BY c DESC
이 반환 몇 행을 경우, 데이터가 나쁘다. 이 행을 많이 돌려주는 경우, 데이터 당신이 생각하는 방법을 구성하지 않습니다. (제로 행을 반환하는 경우, 내가 틀렸다.)
난 당신 같은 SKU를 여러 번 (두 개의 별도의 광고 항목 모두 주문 같은 SKU)를 포함하는 주문을 같은데요.
-
==============================
6.수정은 상관 하위 쿼리 사용을 중지하고 사용 대신에 합류했다. 그들이 행 단위를 실행하는 쿼리의 원인 피해야한다으로 상관 하위 쿼리는 기본적으로 커서입니다.
수정은 상관 하위 쿼리 사용을 중지하고 사용 대신에 합류했다. 그들이 행 단위를 실행하는 쿼리의 원인 피해야한다으로 상관 하위 쿼리는 기본적으로 커서입니다.
당신이 다음 두 값이 필요한 경우 당신이 일치하는 단 하나 개의 기록을 원하는 경우 필드에 원하는 값을 얻기 위해 가입에 당신은 파생 테이블을해야 할 수도 있습니다, 보통은 그러나이 같은 여러 기록을 얻을 것이다 할 것 가입 결과의 ID를 설정합니다. 당신이 하나를 원하는 경우에, 당신은, 당신은 무엇에 따라 등 분 ()를 사용할 수 있습니다) (당신이 최대 사용할 수있는 코드에서, 당신에 의해 주문으로 상위 1을 사용할 수있는 하나를 결정해야하고 할 당신의 데이터에 대한 실제 요구 사항입니다.
-
==============================
7.나는에서는 Northwind 데이터베이스의 예에서, = 대신에 사용, 같은 문제가 있었다 :
나는에서는 Northwind 데이터베이스의 예에서, = 대신에 사용, 같은 문제가 있었다 :
이 시도 :
SELECT CompanyName FROM Customers WHERE CustomerID IN ( SELECT CustomerID FROM Orders WHERE YEAR(OrderDate) = '1997' );
그것 대신에 :
SELECT CompanyName FROM Customers WHERE CustomerID = ( SELECT CustomerID FROM Orders WHERE YEAR(OrderDate) = '1997' );
-
==============================
8.당신의 선택의 비용 부분에 SELECT 문은 하나 개 이상의 값을 반환합니다. 당신은 더 조항을 추가하거나 집계를 사용해야합니다.
당신의 선택의 비용 부분에 SELECT 문은 하나 개 이상의 값을 반환합니다. 당신은 더 조항을 추가하거나 집계를 사용해야합니다.
-
==============================
9.이 오류는이 하위 쿼리는 1 개 이상의 행을 반환하는 것을 의미한다 :
이 오류는이 하위 쿼리는 1 개 이상의 행을 반환하는 것을 의미한다 :
(Select Supplier_Item.Price from Supplier_Item,orderdetails,Supplier where Supplier_Item.SKU=OrderDetails.Sku and Supplier_Item.SupplierId=Supplier.SupplierID )
당신은 아마 당신이 외부 쿼리에서 해당 테이블에서 선택된 값을 참조 할 때문에, 서브 쿼리의 OrderDetails의 및 공급 업체 테이블을 포함하지 않습니다. 그래서 난 당신이 하위 쿼리는 단순히되고 싶은 생각 :
(Select Supplier_Item.Price from Supplier_Item where Supplier_Item.SKU=OrderDetails.Sku and Supplier_Item.SupplierId=Supplier.SupplierID )
난 당신이 상관 관계 대 비 상관 서브 쿼리에 읽어 좋습니다.
-
==============================
10.다른 제안으로,이 작업을 수행하는 가장 좋은 방법은 대신 변수 할당의 조인을 사용하는 것입니다. (대신 암시 적으로 조인 구문을 또한 제안 된, 가입하고 명시를 사용 - 그리고 가장 좋은 방법입니다) 조인을 사용하도록 쿼리를 재 - 쓰기, 당신이 뭔가를 얻을 것입니다 :
다른 제안으로,이 작업을 수행하는 가장 좋은 방법은 대신 변수 할당의 조인을 사용하는 것입니다. (대신 암시 적으로 조인 구문을 또한 제안 된, 가입하고 명시를 사용 - 그리고 가장 좋은 방법입니다) 조인을 사용하도록 쿼리를 재 - 쓰기, 당신이 뭔가를 얻을 것입니다 :
select OrderDetails.Sku, OrderDetails.mf_item_number, OrderDetails.Qty, OrderDetails.Price, Supplier.SupplierId, Supplier.SupplierName, Supplier.DropShipFees, Supplier_Item.Price as cost from OrderDetails join Supplier on OrderDetails.Mfr_ID = Supplier.SupplierId join Group_Master on Group_Master.Sku = OrderDetails.Sku join Supplier_Item on Supplier_Item.SKU=OrderDetails.Sku and Supplier_Item.SupplierId=Supplier.SupplierID where invoiceid='339740'
-
==============================
11.심지어 원래의 게시물 9 년 후,이 저를 도왔다.
심지어 원래의 게시물 9 년 후,이 저를 도왔다.
당신이 어떤 단서없이 이러한 유형의 오류를 수신하는 경우, 테이블에 관련된 트리거 기능이 있어야하고, 분명히이 차 고유의 열을 사용하지 않는 데이터를 필터링 / 선택과 SP, 또는 함수와 끝까지해야한다. 당신이 검색하는 경우 / 어떤 복수의 결과가되지 않습니다 기본 고유 열을 사용하여 필터링. 특히 당신이 선언 된 변수의 값을 할당 할 때. SP에 절대 오류가 있지만, 실행시 오류 욕실을 제공합니다.
"System.Data.SqlClient.SqlException (0x80131904): Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression. The statement has been terminated."
내 경우에는 분명히 단서,하지만이 오류 메시지는 없었다. 트리거하여 테이블과 테이블 업데이트에 연결된 트리거가 또 다른 트리거가 마찬가지로이 두 개의 트리거로하고 SP와 말에 종료했다가 발생했습니다. SP에서 복수의 열 발생 하였다 SELECT 절을 구비 하였다.
SET @Variable1 =( SELECT column_gonna_asign FROM dbo.your_db WHERE Non_primary_non_unique_key= @Variable2
이 여러 행을 반환하는 경우, 당신은 문제가 있습니다.
from https://stackoverflow.com/questions/2653188/sql-server-subquery-returned-more-than-1-value-this-is-not-permitted-when-the-s by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 가변 크기 변수 목록과 MySQL의 문 준비 (0) | 2020.03.17 |
---|---|
[SQL] MySQL의에서 GROUP_CONCAT 유사한 오라클의 모든 기능이 있습니까? [복제] (0) | 2020.03.17 |
[SQL] addslashes를 통해 SQL 주입의 예 ()? (0) | 2020.03.17 |
[SQL] 열은 다른 열에서 계산? (0) | 2020.03.17 |
[SQL] Reporting Services의 단일 매개 변수에 대해 여러 값을 전달 (0) | 2020.03.17 |