2017-07-25 65 views
0

我有一个非常简单的问题,但我不知道什么是错的。我试图减去2个int值,一个来自czasy.voice,另一个来自webrtc.rozlaczenie。我想将结果保存在一个减法单元中。我有查询:在不同的表中减去2个单元格

update czasy set voice = ((select voice from czasy where idu = "2") - select rozlaczenie from webrtc where handshake = "a3u8duwexwf") where idu = "2" 

每次我得到语法错误,都选择作品分别罚款,给了我 21首先选择和4的第二选择,所以查询后,我应该在czasy.voice

得到17时间
+0

是表czasy en webrtc之间有任何关系? –

+0

“idu”在两个表中,但没有任何外键 – liptoneq

+0

,但将使用webrtc表中的哪条记录?或者webrtc中只有一条记录?或者你怎么知道握手的价值? –

回答

1

我想你应该从握手的方法:

UPDATE webrtc 
JOIN czasy ON czasy.idu = webrtc.idu 
SET czasy.voice = czasy.voice - webrtc.rozlaczenie 
WHERE webrtc.handshake = 'a3u8duwexwf'; 

解释:

首先我们创建一个宽表,加入webrtc表和czasy表。我在这两个表中使用idu列。

你会在SELECT查询中做到这一点,所有列都可以看到。 但现在我们用它来更新。 可以访问任何列。 Forexampe SET webrtc.foo = 12, czasy.bar = 42

但当然也像SET czasy.foo = webrtc.bar -12

此外,与给定的握手记录的计算具有值2的IDU,很显然从czasy接合记录有还IDU 2

+0

Omg中指定目标表'czasy'进行更新,它可以工作,非常感谢你:)但是,你能不能简单地解释我为什么我的方式不起作用? – liptoneq

0

你已经忘了周围select rozlaczenie部分打开括号:

UPDATE czasy 
    SET voice = (
     (SELECT voice  FROM czasy WHERE idu = "2") - 
     (SELECT rozlaczenie FROM webrtc WHERE handshake = "a3u8duwexwf") 
     ) 
WHERE idu = "2" 
+0

但是有“set voice =(() - )”,所以我觉得很好,但我会检查它 – liptoneq

+0

Now我得到SQL错误(1093)你不能在FROM子句 – liptoneq

相关问题