使用 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 判断一个相关表的所有记录是不是具有相同的值的主要内容,如果未能解决你的问题,请参考以下文章
同一个表的所有记录由一个字段相关但由另一个字段查询 - sqlserver