MYSQLデータベースのBack Orderテーブルに新しいBack Orderを追加しようとしています。私が得ている問題は、Supplier_IDを選択してBack Order Tableに追加しようとすると、「サブクエリが1つ以上の値を返す」というエラーメッセージが表示されます。"サブクエリが2行以上を返します"というエラーはなぜ発生しますか?
サプライヤー表(それを適切に構造化する方法がわからない)
| Supplier_ID | SupName |
| 1 | EWS |
| 6 |フランクリンベーカリー|
戻る注文表
| BackOr_ID | Supplier_ID | BackOr_Org_Date | Sup_Name |
私は現在使用しているMYSQLのクエリは次のとおりです。
CREATE DEFINER=`root`@`%` PROCEDURE `sp_BackOrder`(
in supname varchar(50),
in dat date
)
BEGIN
insert into Back_Order
(
Supplier_ID,
BackOr_Org_Date,
Sup_Name
)
values
(
(select Supplier_ID from Supplier Where SupName = supname),
dat,
supname
);
END
クエリを使用してC#のコードは次のとおりです。
MySqlCommand cmd = new MySqlCommand("sp_BackOrder", new MySqlConnection(*Connection String*));
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new MySqlParameter("supname", Supp_Name)); //Supp_Name is the Supplier Name (a string variable)
cmd.Parameters.Add(new MySqlParameter("dat", DateTime.Now.ToShortDateString())); //dat is the date the Order is placed
cmd.Connection.Open();
cmd.ExecuteNonQuery();
cmd.Connection.Close();
私が得る唯一のエラーは、サブクエリ(Select Queryと仮定します)が複数の値を返すことです。私は周りを見回してみたし、Stackoverflowを見ても問題の解決策を見つけることができませんでした。どんな助けもありがとう。
値ブロックが意味をなしません – Drew
「SupName」フィールドは一意ですか?それはすべきでしょうか? –
サブクエリー 'サプライヤからのSupplier_IDの選択場所SupName = supname'は、同じ名前のデータベースに少なくとも2つのサプライヤがあるため、1つ以上の値を返します。このようなサブクエリを使用する場合は、一意の列で検索します。 –