Я использую jQuery 1.11.1 и для этой версии я должен использовать вместо «on» функцию «live».
Попробуйте следующее:
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
. Посмотрите на возвращаемые различные значения стоимости и выясните, что вызывает разные значения. Затем спросите кого-нибудь, какую стоимость они хотят, и добавьте критерии к запросу, который выберет эту стоимость.
Даже после 9 лет исходного сообщения, это помогло мне.
при получении этих типов ошибок без какой-либо подсказки должен быть триггер, функция, связанная с таблицей, и очевидно это должно закончиться с SP или функцией с выбором/фильтрацией данных столбец NOT USING Primary Unique. Если Вы будете искать/фильтровать использование столбца Primary Unique то не будет никаких нескольких результатов. Особенно, когда Вы присваиваете значение для заявленной переменной. SP никогда не дает Вам en ошибку, но только ошибку периода выполнения.
"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 имел избранный пункт, который приводил к нескольким строкам.
SET @Variable1 =(
SELECT column_gonna_asign
FROM dbo.your_db
WHERE Non_primary_non_unique_key= @Variable2
, Если это возвращает несколько строк, Вы в беде.
cost = Select Supplier_Item.Price from Supplier_Item,orderdetails,Supplier
where Supplier_Item.SKU=OrderDetails.Sku and
Supplier_Item.SupplierId=Supplier.SupplierID
Этот подзапрос возвращает несколько значений, SQL жалуется потому что он не может назначить несколько значений стоимости в одной записи.
Некоторые идеи:
Оператор select в части стоимости вашего select возвращает более одного значения. Вам нужно добавить больше предложений where или использовать агрегацию.
Исправление состоит в том, чтобы отказаться от использования коррелированных подзапросов и вместо этого использовать объединения. Коррелированные подзапросы - это, по сути, курсоры, поскольку они заставляют запрос выполняться построчно, и их следует избегать.
Вам может потребоваться производная таблица в объединении, чтобы получить нужное значение в поле, если вы хотите, чтобы соответствовала только одна запись, если вам нужны оба значения, тогда обычное соединение
сделает это. но вы получите несколько записей для одного и того же идентификатора в наборе результатов. Если вам нужен только один, вам нужно решить, какой из них, и сделать это в коде, вы можете использовать top 1
с порядком по
, вы можете использовать max ( )
, вы можете использовать min ()
и т. Д., В зависимости от ваших реальных требований к данным.
Либо ваши данные плохие, либо они не структурированы так, как вы думаете. Возможно и то, и другое.
Чтобы доказать / опровергнуть эту гипотезу, выполните следующий запрос:
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
несколько раз (две отдельные позиции , оба заказывают одну и ту же артикул
).
Ошибка означает, что этот подзапрос возвращает более одной строки:
(Select Supplier_Item.Price from Supplier_Item,orderdetails,Supplier where Supplier_Item.SKU=OrderDetails.Sku and Supplier_Item.SupplierId=Supplier.SupplierID )
Вы, вероятно, не хотите включите таблицы orderdetails и supplier в подзапрос, потому что вы хотите ссылаться на значения, выбранные из этих таблиц во внешнем запросе. Итак, я думаю, вы хотите, чтобы подзапрос был простым:
(Select Supplier_Item.Price from Supplier_Item where Supplier_Item.SKU=OrderDetails.Sku and Supplier_Item.SupplierId=Supplier.SupplierID )
Я предлагаю вам ознакомиться с коррелированными и некоррелированными подзапросами.
Как предлагали другие, лучший способ сделать это - использовать соединение вместо присваивания переменной. Переписав свой запрос для использования соединения (и используя синтаксис явного соединения вместо неявного соединения, которое также предлагалось - и это лучшая практика), вы получите что-то вроде этого:
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'