2017-08-02 47 views
0

花费了几个小时寻找堆栈上的解决方案后,我似乎无法得到正确的答案。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行“

这是为什么?

+0

这是不言自明 - 它甚至告诉你,子查询返回多行。让我们看看你在做什么 - 你想用一个数字来更新'clientID'的值。你发出一个子查询。子查询查找多于一个满足条件的行,并且该值无法放入'clientID'中。您的第一个查询不会产生超过1行,所以没关系。你需要做的是坐下来,并推断出这背后的逻辑。 – Mjh

+0

因为'relation.sCustomerNumber = repairs.relation_id'返回多于一行。 – Scott

+0

但“relation.sRelationNumber = repairs.repair_external_supplierID”也返回多行......这就是为什么我似乎无法找到问题:( – George

回答

0

这是我的表的内容

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 
+0

好的,发现问题,感觉很愚蠢这是发生了什么事 表“修复”包含一些行,它们没有任何关于relation_id。 这导致错误“超过1行”。所以,我只需要通过在子查询内添加“AND(relation.sCustomerNumber <>'')”来排除这些问题......问题解决了! – George