使用 SQL 判断一个相关表的所有记录是不是具有相同的值

Posted

技术标签:

【中文标题】使用 SQL 判断一个相关表的所有记录是不是具有相同的值【英文标题】:Using SQL to determine if all records of a related table have the same value使用 SQL 判断一个相关表的所有记录是否具有相同的值 【发布时间】:2013-04-24 10:41:40 【问题描述】:

我正在尝试创建一个存储过程,该过程将根据相关表中的某些值更新一个表上的记录:

MainTable 包含一个 status 字段,并且与 SubTable 相关,SubTable 也有一个 status 字段。我需要更新 MainTable 中每条记录的状态,其中 SubTable 中的所有相关记录都具有相同的状态 x。我已经尝试了几个查询,但认为我以错误的方式处理它。任何帮助将不胜感激。谢谢。

【问题讨论】:

您的表格是否通过status 字段链接? 【参考方案1】:

例如有以下表格:

   Producer ( Code,Name,Status)
   Goods    ( GCode,PCode( Producer Code),Name,Status)

和查询:

Update   Producer  set Status=F  
where not exists (select * from Goods where Status <> X and Goods.PCode= Producer.Code)         

【讨论】:

谢谢!这似乎是我所追求的!我只是想再做一些测试以确保!【参考方案2】:

试试这个:

Update schema.yourtable s set s.fieldtoupdate = (
Select e.Relationalfield from schema.RealtionalTable  e where e.STATUSFIELD = s.STATUSFIELD);

希望对你有帮助

【讨论】:

感谢 Stanley,我已尝试过您的查询,但无法正常工作。我是这样尝试的(由于查询窗口的错误,不得不稍微调整一下):Update MainTable SET MainTable.Status= ( Select e.SubTableStatus from SubTable e where e.SubTableStatus= 11); 基本上,如果 SubTable.SubTableStatus 中的所有记录都是 11,则 MainTable.Status 必须设置为 9。给出的错误是:'子查询返回超过 1 个值。当子查询跟随 =、!=、、>= 或子查询用作表达式时,这是不允许的。' 您是说状态字段不是唯一值吗?为此,状态字段必须是唯一值 不,状态不是唯一的,但我确实得到了我想要的,谢谢。但是,我确实有一个不同的问题,您的代码可以帮助解决。 啊好的很高兴你能得到帮助。

以上是关于使用 SQL 判断一个相关表的所有记录是不是具有相同的值的主要内容,如果未能解决你的问题,请参考以下文章

SQL 如何把两个表相关联的数据一同删除

同一个表的所有记录由一个字段相关但由另一个字段查询 - sqlserver

数据库表关系相关案例

MSSQL 中如何判断两个表的所有数据是不是相同(两个表的字段已经相同)

与外部查询具有相同源表的内部查询

50 万条记录的 SQL 查询性能优化