1

製品を入手するためのクエリで処理する 2 つのテーブルがあります。

ProdBiscuit 
+----+-----+-------+---------------+
| ID | QTY |StockID|    Name       |  
+----+-----+-------+---------------+
|  1 | 100 |   1   |  Bis Chocolat |
+----+-----+-------+---------------+
|  2 | 120 |   2   |  Bis Moutarde |
+----+-----+-------+---------------+
|  3 | 100 |   3   |  Bis Epice    | 
+----+-----+-------+---------------+

 StockData 
+----+-----+-------+------+----+
| ID | QTY |ProdID |Status|Type|
+----+-----+-------+------+----+
|  1 | 100 |   1   |   0  |  3 |
+----+-----+-------+------+----+
|  2 | 120 |   2   |   0  |  3 |
+----+-----+-------+------+----+
|  3 | 100 |   3   |   0  |  3 |
+----+-----+-------+------+----
|  4 | 200 |   1   |   0  |  4 |
+----+-----+-------+------+----+
|  5 | 200 |   2   |   0  |  4 |
+----+-----+-------+------+----+
|  6 | 48  |   1   |   0  |  2 |
+----+-----+-------+------+----+
|  7 |  96 |   2   |   4  |  3 |
+----+-----+-------+------+----+
|  8 | 200 |   1   |   4  |  4
+----+-----+-------+------+----+

ProdBiscuit ID は、StockData.ProdID と関係があります

ProdBiscuit.StockId は StockData.ID と関係があります

StockData.Status = 0 => 在庫あり、> 0 => 在庫を残しました

タイプは、2=>Macaron、3=>Biscuit、4=>Ganache ProdID => ProdBiscuit の ID StockID-> StockData の ID を意味します

以下の方法でこれを取得します

+--------------+--------+---------+
|Name          |QTY PROD|QTY REST | 
+--------------+--------+---------+
|Bis Chocolat  |  100   |   100   |
+--------------+--------+---------+
|Bis Moutarde  |  120   |    24   |
+--------------+--------+---------+
|Bis Epice     |  100   |   100   |
+--------------+--------+---------+

結果は正しいですが、クエリが間違っているようです。WHERE句クエリでは、ステータス> 0の行を検索するため

しかし、正しい結果が得られますか??

これが私のコードです:

 private void RefreshProd()
 {
     Int16 ProdQty;
     Int16 UsedQty;
     DateLst.Items.Clear();
     ProdLst.Items.Clear();
     QtyLst.Items.Clear();
     NomLst.Items.Clear();
     prodidLst.Items.Clear();
     using (MySqlConnection conn = new MySqlConnection(PublicVariables.cs))
     {
        using (MySqlCommand cmd = new MySqlCommand("SELECT tb.id, tb.qty,tb.nom, tb.proddate, IF(status > 0 AND tb.id = sd.prodid, sd.quantite, 0) AS rq FROM StockData AS sd, " + TableName + " AS tb WHERE sd.matcuisine = 3 AND sd.status > 0", conn))
        {
           conn.Open();
           try
           {
                 MySqlDataReader r = cmd.ExecuteReader();
                 while (r.Read())
                {
                   DateLst.Items.Add(Convert.ToDateTime(r["proddate"]).ToString("d"));
                   ProdQty = Convert.ToInt16(r["qty"]);
                   UsedQty = Convert.ToInt16(r["rq"]);
                   ProdLst.Items.Add(r["qty"]).ToString();
                   NomLst.Items.Add(r["nom"]);
                   prodidLst.Items.Add(r["id"]).ToString();
                   QtyLst.Items.Add((ProdQty-UsedQty).ToString());
                 }
           }
           catch (MySqlException e)
             {
                    MessageBox.Show("MYSQL ERROR--> " + e.ToString());
             }
        }
    }

}

擦り傷が見当たりませんでした。

クエリが間違っているように見えますが、正しい結果が得られることに驚いています。

where句で、検索が「sd.status> 0」でなければならないという条件を設定しましたが、status = ZERO条件もフェッチしているように見えます(おそらく、MYSQL WHERE句に技術的なものが欠けている可能性があります)

スタックフローでプレムナードをどのように実行しても、UNION と JOIN は私が使用する方法よりも強力であることがわかりました。

JOIN または UNION でクエリを作成するより効率的な方法はありますか? 私はあなたの助けに感謝します。この方法で解決する方法が見つからなかったからです。

4

1 に答える 1

1

このクエリ?

SELECT 
tb.id
, tb.qty
, tb.nom
, tb.proddate
, sd.quantity as rq
FROM 
  StockData AS sd
INNER JOIN " + TableName + " AS tb 
  On tb.id = sd.prodid
WHERE 
  sd.matcuisine = 3 
  AND sd.status > 0
于 2013-11-07T13:54:48.147 に答える