查询的问题特急.(100分)

  • 主题发起人 主题发起人 小草
  • 开始时间 开始时间

小草

Unregistered / Unconfirmed
GUEST, unregistred user!
表一 单号 订单数
表二 单号 入库数
在ACCESS中做一个查询
双表由单号关联,新的一个字段 订单数-入库数 AS 未入库数.
然而在 表二中单号出现过则 未入库数 出现结果,
表二中单号未出现过则 未入库数 什么也不出现.
要求 表二中单号未出现过则出也现订单数的数量.

 
未明白!
 
表一 :D1 单号: m_id 订单数:Q1
表二 : D2 单号: m_id 入库数:Q2
未入库数: Q3

SELECT d1.m_iD, d1.Q1, d1.Q1-d2.q2 AS Q3
FROM d1, d2
WHERE d1.m_id=d2.m_id
UNION SELECT d1.m_iD, d1.Q1,d1.Q1 AS Q3
FROM d1
WHERE d1.m_id not in(SELECT d2.m_iD FROM d2)
 
To 小草:
这个问题属于“外连接”(Outer Join)。如果使用“外连接”(Inner Join),就不能实现
“表二中单号未出现过则出也现订单数的数量”的要求,因为没有匹配条件。
这个查询应该这样写:
Select 表1.单号 , 表1.订单数 - 表2.入库数 AS 未入库数
From 表1 <font color = #ff0000><strong>Left Outer Join</font></strong> 表2 On (表1.单号 = 表2.单号)
这里应该使用左外连接。
要注意的是:某些数据库引擎可能会报错,因为如果表1有订单数,但是表2没有入库数,结果集
中在计算未入库数的时候,会发生 数值 - NULL 的情况,但是有的数据库引擎容忍这种情况,就是
把 NULL 当成 0 处理。如果出现这种情况,可以先建立视图,再用 Case 子句 Select 。

有时间可以看一看关于表的连接的内容,内连接,左外连接,右外连接,全外连接等等。

From: BaKuBaKu
 
你的语句结果是一个“结果集”,我试了,没错。可能是你的表的问题,可否再详细一些?
 
同意BaKuBaKu,用外连接。
 
wnagierry 正确但速度奇慢,
BaKuBaKu的语句在ACCESS2000中无法实现.
 
sql server 7:
SELECT d1.m_iD, d1.Q1, d1.Q1-d2.q2 AS Q3
FROM d1
join d2 on d1.m_id=d2.m_id
UNION all
SELECT d1.m_iD, d1.Q1,d1.Q1 AS Q3
FROM d1
left out join d2 on d1.m_id=d2.m_id
 
我写的是 Sql Server 的 T-SQL 语法,你可以用 Access 2000 视图向导,右键点表与表的
联线,选“连接属性”,有三种连接方式,这就是 Outer Join ,选好之后就可以生成正确
的 SQL 语句。
 
接受答案了.
 
后退
顶部