mysql - 使用 join 和 group with count 进行更新

标签 mysql join updates

我可以根据第二个表中的计数在表之间进行更新,如下所示:

Update TableJ J
Inner Join (Select B_ID,C,S from TableC group by C,S having count=1) C
On J.C=C.C and J.S=C.S
Set T1.B_ID=T2.B_ID

问题是我的 TableC 不包含 S,它存储在另一个表中并通过 B 关联,称为 Table_BS (不是开玩笑请:|)。如果我不必担心计数,那么我可以这样做:

Update TableJ J
Inner Join TableC C
Inner Join TableBS BS
On J.C=C.C and C.S=BS.S
Set J.B_ID=BS.B_ID

问题在于,与原始计数一样,当只有一 strip 有 SC 记录时,我只想返回 B_ID > 记录在 TableBS 中。

更新: 嗯,这就是我已经走了多远(明智选择):

Select J.ID,B.B_ID
From DBJ J Inner Join LBS B Inner Join  C 
On J.C=C.C And (
J.S_ID = B.S_ID 
or J.S_ID=B.CS_ID) 
and B.B_ID=C.B_ID

在我的例子中返回三个记录:

+----+------+
| ID | B_ID |
+----+------+
| 88 | 100  |
+----+------+
| 90 | 200  |
+----+------+
| 90 | 200  |
+----+------+

ID 是我要更新的记录,B_ID 是我要更新的值。在这种情况下,我试图限制的计数是输出中的 ID 列,换句话说,我只想更新 TableJ,记录 88 的值为 100。TableJ 记录 90 结果有 >1 结果,所以我想跳过它。只是不确定在哪里放置 group bycount

更新:不知道为什么这个解决方案仍然在我的掌握之外,尽管越来越接近,我可以让选择现在返回要更新的记录的 ID 以及仅在具有一个结果的那些记录上更新的值,如下所示:

Select J.ID,B.B_ID
From DBJ J Inner Join LBS B Inner Join  C 
On J.C=C.C And (
J.S_ID = B.S_ID 
or J.S_ID=B.CS_ID) 
and B.B_ID=C.B_ID group by J.ID having count(*)=1

返回

+----+------+
| ID | B_ID |
+----+------+
| 88 | 100  |
+----+------+

现在仍然无法将 TableJ 记录 88 字段 B_ID 更新为值 100。

最佳答案

我不确定我是否正确理解了这个问题,但这是我的解决方案

Update TableJ J 
Inner Join (
 Select B_ID,TableC.C, TableBS.S 
 from TableC Inner Join TableBS
 on TableC.B= TableBS.B 
 group by TableC.C,TableBS.S 
 having count(*)=1
) C 
On J.C=C.C 
Set J.B_ID=C.B_ID

关于mysql - 使用 join 和 group with count 进行更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37736489/

相关文章:

python 关闭mysql数据库连接

mysql - 如果字段不为空,我需要用 if then else 做一个 sql 来连接表吗?

php - 主键 ID 缺少值

sql - bigquery连接错误字段具有不同类型int32和int64,因此不能作为连接属性进行比较

updates - joomla 3 中的控制面板未正确显示 - 后端的其余部分正常

ios - 在不使用XML的情况下更新sqlite数据库

mysql - SQL 将通配符与变量占位符相结合

sql - Ora SQL 查询 : joining without references

ruby-on-rails - 在rails中,如何在不删除真实记录的情况下销毁 'join table item'?

electron - 您是否需要访问目标操作系统才能对 Electron 签名 Electron 应用进行编码