这个SQL 语句能改成子查询吗

时间:2022-10-17 19:20:28
SELECT ss.shuliang - ss2.geshu 
from ss,ss2 WHERE
ss.danjia=ss2.danjia;

上面这是只是表达个思想,意思是计算库存,入库数量减出库数量,当商品名称一样的时候就两个表做减法,一个入库表一个出库表。
书上说这种语法风格会产生大量笛卡尔积,所以建议采用子查询,这个我也不知道怎么改成子查询。

上面的思路是把入库和出库分别记录在两张表,如果都记录到一张表会不会方便写子查询语句呢,如果写到一张表就需要在添加一个表示出库或是入库的列。

7 个解决方案

#1


danjia 在两个表中是唯一的吗?

#2


引用 1 楼 sinat_28984567 的回复:
danjia 在两个表中是唯一的吗?

不唯一,有重复,

#3


引用 1 楼 sinat_28984567 的回复:
danjia 在两个表中是唯一的吗?

danjia 是商品名称,在入库表和出库表中反复使用,一会在入库表中入几个,一会入几个,出库表也是一会出几个,一会出几个

#4


引用 2 楼 xiaoyuanyuan2009 的回复:
Quote: 引用 1 楼 sinat_28984567 的回复:

danjia 在两个表中是唯一的吗?

不唯一,有重复,

那就产生笛卡尔积了
例如
ss表
danjia  shuliang
1             10
1             12

ss2表
danjia  geshu
1             1
1             2

上边那个语句进行减法的时候,
ss表中的第一条数据,需要对ss2中的两条数据都进行减法操作。然后ss表中第2条数据又对ss2的两条数据做两次减法。



#5


引用 4 楼 sinat_28984567 的回复:
那就产生笛卡尔积了

把出库和入库记录放在同一张表可以不产生笛卡尔积吗,或者有什么别的解决方法

#6


一张表可以,一张表记录进出所有记录也是常见设计。
至于其它书上讲的东西,仅供参考。效率的问题要具体看表中的数据分布和索引的设计,

#7


给商品表上添加库存字段,在入库或者出库的时候对其进行加减法

#1


danjia 在两个表中是唯一的吗?

#2


引用 1 楼 sinat_28984567 的回复:
danjia 在两个表中是唯一的吗?

不唯一,有重复,

#3


引用 1 楼 sinat_28984567 的回复:
danjia 在两个表中是唯一的吗?

danjia 是商品名称,在入库表和出库表中反复使用,一会在入库表中入几个,一会入几个,出库表也是一会出几个,一会出几个

#4


引用 2 楼 xiaoyuanyuan2009 的回复:
Quote: 引用 1 楼 sinat_28984567 的回复:

danjia 在两个表中是唯一的吗?

不唯一,有重复,

那就产生笛卡尔积了
例如
ss表
danjia  shuliang
1             10
1             12

ss2表
danjia  geshu
1             1
1             2

上边那个语句进行减法的时候,
ss表中的第一条数据,需要对ss2中的两条数据都进行减法操作。然后ss表中第2条数据又对ss2的两条数据做两次减法。



#5


引用 4 楼 sinat_28984567 的回复:
那就产生笛卡尔积了

把出库和入库记录放在同一张表可以不产生笛卡尔积吗,或者有什么别的解决方法

#6


一张表可以,一张表记录进出所有记录也是常见设计。
至于其它书上讲的东西,仅供参考。效率的问题要具体看表中的数据分布和索引的设计,

#7


给商品表上添加库存字段,在入库或者出库的时候对其进行加减法