【发布时间】:2011-10-04 03:36:30
【问题描述】:
我正在尝试将 newtable 上的 store id 与 maintable 中的 id 同步:
UPDATE newtable t SET t.store_id = (SELECT store_id FROM maintable s
WHERE t.state = s.state AND s.city = t.city AND t.name = s.name)
当子查询返回多于一行时,它会出错,并显示“子查询返回多于 1 行”,但是当它返回零行时,子查询被认为没有返回任何内容,因此 newtable 上的 store_id 保持为 NULL。这里没有什么新东西,它就是它的工作原理。
我想知道是否可以让子查询的输出与当它有多个匹配行时没有匹配时的输出相同。
这样,我将只为主表上的一个匹配行同步 store_id,并在子查询中出现多个匹配行时跳过。
【问题讨论】:
-
如果
SELECT store_id产生一个值,则将t.store_id设置为该值;如果它没有产生任何结果,则将t.store_id设置为 NULL;如果它产生多个值,则将t.store_id设置为 NULL。对吗? -
@mu 太短:我想当返回多个值时,他只想丢弃重复的值,只将其中一个存储在
store_id中,当什么都不返回时,他想要存储一个默认值。 -
@Sayem:那是我不清楚的,问题的最后两段似乎在说不同的东西。
-
我来了!我的意思是@mu 太短了。
标签: mysql sql mysql-error-1242