MySQL选择问题
表1:qa_退货_项目 表2:qa_返回_残留物 我花了很长时间试图得到这个结果: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,则 项目数量=质量保证
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
);