Sqlite查询选择与另一个表匹配的列

r6l8ljro  于 2022-11-30  发布在  SQLite
关注(0)|答案(1)|浏览(193)

我有三个包含tbl_goods、tbl_units和tbl_sat的表,如下所示:
tbl_goods,包含已销售的商品

+--------+-------+-------+-------+  
   | goods  |code   |qty    |unit   |  
   +--------+-------+-------+-------+   
   | cigar  | G001  | 1     | pack  |
   | cigar  | G001  | 2     | pcs   |
   | cigar  | G001  | 2     | box   |
   | bread  | G002  | 2     | pcs   |
   | bread  | G002  | 2     | pack  |   
   | soap   | G003  | 1     | pcs   |  
   +--------+-------+-------+-------+

和tbl_units,如下所示:

+--------+-------------+-------+  
   | code   |ucode        |qty    |
   +--------+-------------+-------+
   | KG001  | U001        | 10    |
   | KG001  | U002        | 20    |
   | KG002  | U001        | 15    |
   +--------+-------------+-------+

我在tbl_units中代码前面添加了字母“K”,以区别并确保不会与tbl_goods中的代码冲突。
和tbl_sat,如下所示:

+--------+-------------+ 
   | ucode  | unit        |
   +--------+-------------+
   | U001   | pack        |
   +--------+-------------+
   | U002   | box         |
   +--------+-------------+
   | U003   | crate       | etc

因此只有雪茄和面包会有转换,因为表单位有代码
我需要显示的结果如下:

+--------+-------+-------+-------+--------+  
   | goods  |code   |qty    |unit   | total  |
   +--------+-------+-------+-------+--------+   
   | cigar  | G001  | 1     | pack  | 10     |
   | cigar  | G001  | 2     | pcs   | 2      |
   | cigar  | G001  | 2     | box   | 40     |
   | bread  | G002  | 2     | pcs   | 2      |
   | bread  | G002  | 2     | pack  | 30     |
   | soap   | G003  | 1     | pcs   | 1      |
   +--------+-------+-------+-------+--------+

实际上这个问题已经被问过了,可能类似,但是在表结构和编码上的变化,所以我想我开始另一个新的问题。希望这能解决我的问题
非常感谢您的光临
此致

kgsdhlau

kgsdhlau1#

我尝试了几种方法,我不得不使用“硬方法”。首先我找到的数量,它不是最小的形式('件')通过使用查询如下:

SELECT g.goods, g.qty , g.unit , t.unit, u.ucode, u.qty,  
(CASE 
  WHEN  t.unit IS NULL
  THEN g.qty 
  ELSE g.qty * u.qty 
  END) AS total
FROM 
tbl_goods g
LEFT JOIN tbl_units u ON u.code= 'K' || g.code
LEFT JOIN  tbl_sat t ON u.ucode= t.ucode AND g.unit=t.unit
WHERE t.unit  IS NOT NULL

在我得到了没有最小形式的商品清单后,我又进行了一次查询,得到了具有最小形式的清单

SELECT g.goods, g.qty, g.unit,g.code
FROM 
tbl_goods g  
WHERE g.unit='Pcs'

之后,我将这两个查询结合起来,希望速度对于大型记录来说足够好
此致

相关问题