1. ホーム
  2. sql

[解決済み] SQL Server サブクエリが 1 つ以上の値を返しました。これは、サブクエリが =, !=, <, <= , >, >= のように続く場合は許可されません。

2022-01-28 01:36:16

質問

以下のクエリを実行しました。

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  

以下のようなエラーが発生します。

Msg 512, Level 16, State 1, Line 2 サブクエリが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'

を除いて同じ行が複数返されます。 cost カラムがあります。返された異なるコスト値を見て、何が原因で異なる値になっているのかを考えてみてください。そして、どのコスト値が欲しいかを誰かに聞いて、そのコストを選択するための条件をクエリーに追加します。