SqlServer2008 如何判断一张表的数据不在另外两张表里且在该表中新建一列显示状态

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SqlServer2008 如何判断一张表的数据不在另外两张表里且在该表中新建一列显示状态相关的知识,希望对你有一定的参考价值。

这张表的主键分别是另外两张表的外键!

判断tab1的是否在tab2和tab3中有值:
SELECT DISTINCT
a.表字段 AS 字段名,
NVL(b.外键,0) AS dataintab2,
NVL(c.外键,0) AS dataintab3
FROM tab1 a,tab2 b,tab3 c
WHERE a.主键=b.外键(+)
AND a.主键=c.外键(+)
AND a.主键=一个具体值;

PS:1、NVL函数为如果b的外键为空则返回0
2、(+)表示对于a与b和a与c的连接使用左外连接,即就算b和c中没有数据也会将a中的数据返回
3、将b和c的外键返回给dataintab2和dataintab3,即如果b和c中有数据则返回这个数据,否则为空返回0
4、判断b和c中是否有数据即看dataintab2和dataintab3是否为0,如果为0表示b或者c中没有a的数据
5、返回之后在程序中访问这个字段即可完成对其状态的显示。
6、由于使用了外连接,因此会返回几组相同的数据,使用DISTINCT去除相同的数据

上面是一个Oracle版本,下面是一个通用版本:
SELECT DISTINCT
a.表字段 AS 字段名,
NVL(b.外键,0) AS dataintab2,
NVL(c.外键,0) AS dataintab3
FROM tab1 a LEFT JOIN tab2 b ON a.主键=b.外键 LEFT JOIN tab3 c ON a.主键=c.外键
WHERE a.主键=一个具体值;

具体问题具体分析,希望朋友你能养成良好的分析问题的习惯。
希望能够对你有所帮助。
参考技术A select * from Source s
where s.PK not in
(select r.FK from reference1 r)
and s.PK not in
(select f.FK from reference2 f)
参考技术B 说清楚点行不 参考技术C 你既然设置了外键,还需要再做这个判断吗? 参考技术D 编个存储过程作个判断,把结果填充进去

sql中如何 将一张表的数据 更新到另外一张表的字段中

今天操作数据库       有个需求需要从一张流水表中有用户付款金额    还有一张  是用户的结算金额    每个用户的付款和结算费率和手续费等都不一样   需要将剩余可以结算的金额查询出来  进行更新到各自对应的用户后面  花了几分钟写出来去测试了一下  没问题  

万变不离其中   依然还是  在 update  +表(及其关联表) +set  +更改字段 +where 条件

update merchant m join (
select pc.cp_channel channelId,0.01*sum(pc.real_pay) as totalmoney, scs.flow ,(0.01*sum(pc.real_pay))-flow as settlementmoney
from pay_record pc
right join
(select channalId,sum((money+charge)/(1-rate)) as flow from settlement where status > -1 GROUP BY channalId)
scs on scs.channalId=pc.cp_channel GROUP BY pc.cp_channel
)a on a.channelId=m.channel_id

set m.money= a.settlementmoney where a.channelId=m.channel_id

 

以上是关于SqlServer2008 如何判断一张表的数据不在另外两张表里且在该表中新建一列显示状态的主要内容,如果未能解决你的问题,请参考以下文章

怎样将sqlserver2005数据库中一张表的一半数据取出来

如何把sql server一张表的数据实时同步到Oracle数据库

sqlserver 基于一张表更新另外一张表

mysql 和 sqlserver中备份一张表的区别

如何把sql server一张表的数据实时同步到Oracle数据库

SQLSERVER新建一张表然后在该表的其中一个字段上建立一个非聚集索引,那麽这张表是堆表还是B树结构的表