Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.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
MySQL选择问题_Mysql_Sql_Database - Fatal编程技术网

MySQL选择问题

MySQL选择问题,mysql,sql,database,Mysql,Sql,Database,表1:qa_退货_项目 表2:qa_返回_残留物 我花了很长时间试图得到这个结果: item_code - item_quantity 2 - 1 3 - 2 如果qa_返回_items.item_code=qa_返回_残留物.item_code和status_code=11,则 项目数量=质量保证返回项目。项目数量- qa_返回_残留物。项目_数量 否则如果qa_返回项目。项目代码=qa_返回剩余物。项目代码和状态代码=12,则 项目数量=质量保证

表1:qa_退货_项目

表2:qa_返回_残留物

我花了很长时间试图得到这个结果:

item_code -   item_quantity
2         -   1
3         -   2
如果qa_返回_items.item_code=qa_返回_残留物.item_code和status_code=11,则

项目数量=质量保证返回项目。项目数量- qa_返回_残留物。项目_数量

否则如果qa_返回项目。项目代码=qa_返回剩余物。项目代码和状态代码=12,则

项目数量=质量保证返回项目。项目数量+ qa_返回_残留物。项目_数量

否则

如果结束

我尝试了以下查询:

查询将返回以下结果:


尝试此查询。我还没有测试过。你的要求很难满足。但我已经从表结构和给定条件子句构建了它

select qa_returns_items.item_code, 
       (CASE status_code
         WHEN 11 THEN (qa_returns_items.item_quantity - qa_returns_residues.item_quantity) 
         WHEN 12 THEN (qa_returns_items.item_quantity + qa_returns_residues.item_quantity)   END) as item_quantity , 
        qa_returns_residues.item_unitprice,
       ( qa_returns_residues.item_unitprice * item_quant) as item_subtotal,
       (qa_returns_residues.item_discount * item_quantity) as item_discount,
       ( ( qa_returns_residues.item_unitprice * item_quant) -   
         (qa_returns_residues.item_discount * item_quantity) ) as item_total
where
 item_quantity > 0 AND  qa_returns_items.item_code = qa_returns_residues.item_code
更新:


根据我的经验,我建议您从一个新的数据库开始,不要记录,并开始一步一步地调试

首先创建数据库和表。在此之后,只插入2条包含简单数据的记录。然后开始调试

从我能够调试的内容来看,问题在您的子选择中。在主题中,您希望看到项目代码2和3。这不可能发生,因为:

SELECT ri.item_code,
       CASE status_code
       WHEN 11 then ri.item_quantity - rr.item_quantity 
       WHEN 12 then ri.item_quantity + rr.item_quantity
       END AS item_quantity
FROM      qa_returns_residues rr
LEFT JOIN qa_returns_items ri
ON        ri.item_code = rr.item_code
WHERE     ri.returnlog_code = 1   // Why do you need this for ?
返回

item_code   item_quantity
2           2
1           0
1           0
1           0
1           2
然后主查询只选择item_quantity>0的结果。 因此,你得到的只有

item_code   item_quantity
1           2
2           2
结果,

我不太清楚这个操作的目的是什么,但请记住,简单的解决方案总是最好的

我解决了我的问题:

SELECT  
        item_code, 
        item_quantity, 
        item_unitprice, 
        item_subtotal, 
        item_discount, 
        item_total 
FROM (
        SELECT  qa_returns_items.item_code, 
                qa_returns_items.item_quantity, 
                qa_returns_items.item_unitprice, 
                qa_returns_items.item_subtotal, 
                qa_returns_items.item_discount, 
                qa_returns_items.item_total 
        FROM qa_returns_items 
        WHERE returnlog_code = 1
    UNION
        SELECT  qa_returns_residues.item_code, 
                qa_returns_residues.item_quantity, 
                qa_returns_residues.item_unitprice, 
                qa_returns_residues.item_subtotal, 
                qa_returns_residues.item_discount, 
                qa_returns_residues.item_total 
        FROM qa_returns_residues 
        WHERE returnlog_code = 1 
        ORDER BY item_code ASC
) 
AS SubQueryAlias
WHERE item_code NOT IN (
                        SELECT a.item_code 
                        FROM qa_returns_items a 
                        JOIN qa_returns_residues b 
                            ON b.item_code = a.item_code 
                        WHERE a.returnlog_code = 1 
                            AND b.returnlog_code = 1
                        );

那么你到底想问什么呢???需要选择上面提到的字段,在第4列中应用这些条件,标记结果我不明白你为什么想要项目代码2和3?它们与其他东西的区别是什么?我在选择列表中找不到商品数量@tftd这是一个完整的数据库,您的查询是正确的,但列item_quant不存在。请将其替换为item_quantity,并从qa_returns_items、qa_returns_residents中添加FROM子句。记住项目数量是不明确的,因为在这两个表上,此列都是减法/加法的结果:qa_返回项目。项目数量-qa_返回剩余。项目数量这就是我使用别名项目数量的原因。错误代码:1054。“字段列表”表qa_returns_残留物中的未知列“item_quant”:是退货的残留物,qa_returns_items:是所有有退货的项目。我尝试使用此查询来获取原始发票项未退货,将剩余部分添加到第一次退货中。
SELECT ri.item_code,
       CASE status_code
       WHEN 11 then ri.item_quantity - rr.item_quantity 
       WHEN 12 then ri.item_quantity + rr.item_quantity
       END AS item_quantity
FROM      qa_returns_residues rr
LEFT JOIN qa_returns_items ri
ON        ri.item_code = rr.item_code
WHERE     ri.returnlog_code = 1   // Why do you need this for ?
item_code   item_quantity
2           2
1           0
1           0
1           0
1           2
item_code   item_quantity
1           2
2           2
SELECT  
        item_code, 
        item_quantity, 
        item_unitprice, 
        item_subtotal, 
        item_discount, 
        item_total 
FROM (
        SELECT  qa_returns_items.item_code, 
                qa_returns_items.item_quantity, 
                qa_returns_items.item_unitprice, 
                qa_returns_items.item_subtotal, 
                qa_returns_items.item_discount, 
                qa_returns_items.item_total 
        FROM qa_returns_items 
        WHERE returnlog_code = 1
    UNION
        SELECT  qa_returns_residues.item_code, 
                qa_returns_residues.item_quantity, 
                qa_returns_residues.item_unitprice, 
                qa_returns_residues.item_subtotal, 
                qa_returns_residues.item_discount, 
                qa_returns_residues.item_total 
        FROM qa_returns_residues 
        WHERE returnlog_code = 1 
        ORDER BY item_code ASC
) 
AS SubQueryAlias
WHERE item_code NOT IN (
                        SELECT a.item_code 
                        FROM qa_returns_items a 
                        JOIN qa_returns_residues b 
                            ON b.item_code = a.item_code 
                        WHERE a.returnlog_code = 1 
                            AND b.returnlog_code = 1
                        );