请教SQL语句.(100分)

  • 主题发起人 主题发起人 sieco
  • 开始时间 开始时间
S

sieco

Unregistered / Unconfirmed
GUEST, unregistred user!
有三个表
表一 表二 表三
USERID SIGN DATE1 DATE2 USERID USERVALUE USERID SOURCE
0001 Y 2002/8/12 2002/8/13 0001 NULL 0001 50
0002 N 2002/8/20 2002/8/21 0002 NULL 0002 100
0003 Y 2002/8/10 2002/8/11 0003 NULL 0003 60
0001 Y 2002/7/10 2002/7/12 0004 NULL 0004 50
0004 Y 2002/8/25 2002/8/26 0005 NULL 0005 80
0001 Y 2002/8/20 2002/8/23 0006 NULL 0006 40
0002 N 2002/8/10 2002/8/17 ....... .......
0005 Y 2002/8/1 2002/8/2
0006 N 2002/8/24 2002/8/25
0007 Y 2002/8/30 2002/8/31
.....
......
现在要更新表二中VALUE字段的值
条件如下: 若表一的日期在2002/8/1和2002/8/31这间,且SINGN的值为'Y',则表二对应的
USERID的USERVALUE的值为0 ,否则表二VALUE的值等于表三对应USEID的SOURCE的值.
不知这个SQL怎样写... [:(][:(] [?] 已困扰我两天了......
我这样写的却不行,请大家看看错在哪里.....
UPDATE 表二
SET USERVALUE=0
WHERE 表二.USERID=(SELECT USERID FROM 表一 WHERE SIGN='Y' AND DATE1>2002/8/1 AND DATE2<2002/8/31)

UPDATE 表二
SET USERVALUE=(SELECT SOURCE FROM 表三 WHERE 表二.USERID=表三.USERID) WHERE USERVALUE IS NULL
 
试一试:
UPDATE 表二
SET USERVALUE=0
WHERE 表二.USERID in (SELECT USERID FROM 表一 WHERE SIGN='Y' AND DATE1>'2002/8/1' AND DATE2<'2002/8/31')

UPDATE 表二
SET USERVALUE=(SELECT SOURCE FROM 表二,表三 WHERE 表二.USERID=表三.USERID) WHERE USERVALUE IS NULL
 
UPDATE 表二
SET USERVALUE=0
WHERE 表二.USERID in (SELECT USERID FROM 表一 WHERE SIGN='Y' AND DATE1>2002/8/1 AND DATE2<2002/8/31)
 
最终结果,SQL Server2000通过。
UPDATE 表二
SET USERVALUE=0
WHERE 表二.USERID in (SELECT USERID FROM 表一 WHERE SIGN='Y' AND DATE1>'2002/8/1' AND DATE2<'2002/8/31')

UPDATE 表二
SET uservalue = 表三.SOURCE
FROM 表二, 表三
WHERE (表二.userid = 表三.USERID) and USERVALUE IS NULL
 
多人接受答案了。
 
后退
顶部