Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在mysql中如何计算两个表中两个和的差_C#_Mysql - Fatal编程技术网

C# 在mysql中如何计算两个表中两个和的差

C# 在mysql中如何计算两个表中两个和的差,c#,mysql,C#,Mysql,在一个查询中,我有两个表要处理,以获得手头上的产品 ProdBiscuit +----+-----+-------+---------------+ | ID | QTY |StockID| Name | +----+-----+-------+---------------+ | 1 | 100 | 1 | Bis Chocolat | +----+-----+-------+---------------+ | 2 | 120 | 2 | Bi

在一个查询中,我有两个表要处理,以获得手头上的产品

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
+----+-----+-------+------+----+
ProdBuisite ID与StockData.ProdID相关

ProdBique.StockId与StockData.ID是关系型的

StockData.Status=0=>Entry in stock,>0=>Left the stock

类型表示2=>Macaron,3=>饼干,4=>Ganache ProdID=>prodcuite的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=0的条件。(也许我在MYSQL where子句中遗漏了一些技术性的东西)

无论我是如何在人流中进行前置,我都知道联合和加入比我使用的方法更强大

有没有更有效的方法通过加入oro UNION来编写我的查询?我将感谢你的帮助。因为我找不到用这种方法解决它的方法。

这个查询

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
这个问题

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

你为什么有这种双向关系?想必
stockid
不是饼干的固有属性,因此不应该出现在产品表中!哦,我还是不明白
产品数量
库存数量
之间的区别。是的,产品数量可以被抑制。但要生产macaron,我需要两种成分巧克力和饼干。它们的数量保存在产品(饼干、巧克力)中。这是一个int32,在产品表中,我有配料id NBR及其数量,因此我不希望在生产过程中触发每个库存数据。库存数量如果状态为零,则为库存条目1=售出2=礼品3=有缺陷4=用于生产macaron。如果你愿意,我可以把我写的东西寄给你。不,谢谢。整个事情太令人困惑了。恐怕您的模式需要重新设计。”芥末杏仁饼?谁知道呢?也许我正处于发现c#和Mysql的阶段。这个程序是我用visualbasic编写的,带有I/O文件。现在我用c#和mysql来翻译它,学习两者。为什么你们有这种双向关系?想必
stockid
不是饼干的固有属性,因此不应该出现在产品表中!哦,我还是不明白
产品数量
库存数量
之间的区别。是的,产品数量可以被抑制。但要生产macaron,我需要两种成分巧克力和饼干。它们的数量保存在产品(饼干、巧克力)中。这是一个int32,在产品表中,我有配料id NBR及其数量,因此我不希望在生产过程中触发每个库存数据。库存数量如果状态为零,则为库存条目1=售出2=礼品3=有缺陷4=用于生产macaron。如果你愿意,我可以把我写的东西寄给你。不,谢谢。整个事情太令人困惑了。恐怕您的模式需要重新设计。”芥末杏仁饼?谁知道呢?也许我正处于发现c#和Mysql的阶段。这个程序是我用visualbasic编写的,带有I/O文件。现在我用c#和mysql进行翻译,以便学习这两种语言。我必须计算使用的数量之和(sd)并从tb数量中减去它。但是sd的数量(使用)在4-5行,而不是一行。tb的数量始终在一行中,sd.status不能为空,但必须为零。这取决于表的定义。非常感谢。结果我只得到了两行相同的产品。我必须有3排。我的第一道菜的代码给出了正确的结果,但第二道菜给出了双精度。编辑:顺便问一下,您收到的每个值都放在类型列表而不是1类列表中,这有什么逻辑原因吗?对我来说,这看起来更简单。rq必须是sd.quantity和条件的总和(sd.status>0和sd.prodid=tb.id和sd.MatCuision=3)说明:sd.status>0表示使用它。sd.prodid是存储在Stockdata MatCuision=3(饼干搜索)中的产品饼干(tb)的id。语法不正确,但必须在此逻辑中选择tb.id,tb.qty,tb.nom,tb.proddate FROM prodbique AS tb internal JOIN StockData AS sd SELECT quantite,SUM(quantite)AS rq ON(tb.id=sd.prodid AND sd.status>0 AND sd.matc=3)我必须计算所用数量之和(以sd为单位)并将其减去tb数量。但是sd的数量(使用)在4-5行,而不是一行。tb的数量始终在一行中,sd.status不能为空,但必须为零。这取决于表的定义。非常感谢。结果我只得到了两行相同的产品。我必须有3排。我的第一道菜的代码给出了正确的结果,但第二道菜给出了双精度。编辑:顺便问一下,您收到的每个值都放在类型列表而不是1类列表中,这有什么逻辑原因吗?对我来说,这看起来更简单。rq必须是sd.quantity和条件的总和(sd.status>0和sd.prodid=tb.id和sd.MatCuision=3)说明:sd.status>0表示使用它。sd.prodid是存储在Stockdata MatCuision=3(饼干搜索)中的产品饼干(tb)的id。语法不正确,但必须在此逻辑中选择tb.id,tb.qty,tb.nom,tb.proddate FROM prodbique AS tb internal JOIN StockData AS sd选择quantite,SUM(quantite)AS rq ON(tb.id=sd.prodid和sd.status>0和sd.matd=3)