mysql更新查询不适用于不同的列
花费了几个小时寻找堆栈上的解决方案后,我似乎无法得到正确的答案。mysql更新查询不适用于不同的列
我有2个表: “修理” & “关系”
在表中 “修理”,也有名为 “repair_external_supplierID” 4列, “relation_id”, “cliendID” 和 “供应商ID”。 (除了ID列)
在表“关系”中,我有2列名为“sRelationNumber”&“sCustomerNumber”。 (除ID列之外)
“维修”中的“supplierID”为空,需要填写“Relation”列中“ID”的数据,其中“repairs”中的“repair_external_supplierID”与“sRelationNumber”匹配“关系”
同样的事情会发生在“clientID的”,“修理,其具有当列在要填充‘’从‘修理relation_id sCustomerNumber‘从‘关系’
这是在’列匹配’代码:
/*--SET SUPPLIER ID --*/
UPDATE repairs
SET supplierID = (
SELECT
id
FROM
relation
WHERE
relation.sRelationNumber = repairs.repair_external_supplierID
)
WHERE
supplierID = '' OR supplierID IS NULL;
/*--SET CLIENT ID --*/
UPDATE repairs
SET clientID = (
SELECT
id
FROM
relation
WHERE
relation.sCustomerNumber = repairs.relation_id
)
WHERE
clientID = '' OR clientID IS NULL;
对于某些reasone第一个查询按计划工作,第二个查询返回“子查询返回多于1行“
这是为什么?
这是我的表的内容
RELATION
id sCustomerNumber sSupplierNumber sRelationNumber
1 K12345 S456789 R123456
2 K98765 S456678 R987654
3 K15789 S957876 R854754
....
这些都不行具有相同的数字
这是我修理表的样子:
REPAIRS
id clientID relation_id supplierID external_supplier_id
1 K12345 R123456
2 K98765 R987654
3 K15789 R854754
,这应该成为:
REPAIRS
id clientID relation_id supplierID external_supplier_id
1 1 K12345 1 R123456
2 2 K98765 2 R987654
3 3 K15789 3 R854754
好的,发现问题,感觉很愚蠢这是发生了什么事 表“修复”包含一些行,它们没有任何关于relation_id。 这导致错误“超过1行”。所以,我只需要通过在子查询内添加“AND(relation.sCustomerNumber '')”来排除这些问题......问题解决了! – George
这是不言自明 - 它甚至告诉你,子查询返回多行。让我们看看你在做什么 - 你想用一个数字来更新'clientID'的值。你发出一个子查询。子查询查找多于一个满足条件的行,并且该值无法放入'clientID'中。您的第一个查询不会产生超过1行,所以没关系。你需要做的是坐下来,并推断出这背后的逻辑。 – Mjh
因为'relation.sCustomerNumber = repairs.relation_id'返回多于一行。 – Scott
但“relation.sRelationNumber = repairs.repair_external_supplierID”也返回多行......这就是为什么我似乎无法找到问题:( – George