【问题标题】: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 字段链接?

标签: sql stored-procedures plsql


【解决方案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 个值。当子查询跟随 =、!=、、>= 或子查询用作表达式时,这是不允许的。'
  • 您是说状态字段不是唯一值吗?为此,状态字段必须是唯一值
  • 不,状态不是唯一的,但我确实得到了我想要的,谢谢。但是,我确实有一个不同的问题,您的代码可以帮助解决。
  • 啊好的很高兴你能得到帮助。
猜你喜欢
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
  • 2021-10-30
  • 1970-01-01
  • 1970-01-01
  • 2020-12-03
  • 2019-01-28
  • 1970-01-01
相关资源
最近更新 更多