我有这个选择查询返回简单的表 - 见下文。多连接'gotohell'更新
我花了一整天的时间试图编写一个更新声明,当EQLOC为NULL或与HOOKNO不一样时,它应该用HOOKNO更新......但是我失败了。
请帮忙。
SELECT ho.HOOK_OFFICE_LETTER || LPAD(khc.HOOK_NO, 5, '0') as hookno, eq.location_description as eqloc
FROM KEY_HOOK_CURRENT khc
INNER JOIN KEY_HOLDING kho ON khc.KEY_HOLDINGOID = kho.KEY_HOLDINGOID
INNER JOIN CONTRACT con ON kho.CUSTOMEROID = con.CUSTOMEROID
INNER JOIN VW_CURRENT_CONTRACT_PERIOD ccp ON con.CONTRACT_ID = ccp.CONTRACT_ID
INNER JOIN CONTRACT_PERIOD cp ON (ccp.CONTRACT_ID = cp.CONTRACT_ID AND ccp.CONTRACT_PERIOD = cp.CONTRACT_PERIOD)
INNER JOIN CONTRACT_EQUIP_PERIOD cep ON cp.CONTRACT_PERIODOID = cep.CONTRACT_PERIODOID
INNER JOIN EQUIPMENT eq ON cep.EQUIPMENTOID = eq.EQUIPMENTOID
INNER JOIN HOOK_OFFICE ho ON khc.HOOK_OFFICEOID = ho.HOOK_OFFICEOID
WHERE
eq.PRODUCT_ID = 'XXX' AND
(eq.LOCATION_DESCRIPTION IS NULL OR
ho.HOOK_OFFICE_LETTER || LPAD(khc.HOOK_NO, 5, '0') <> eq.LOCATION_DESCRIPTION)
以下查询将返回:
HOOKNO EQLOC
G00754 (null)
L02860 (null)
L04052 L12345
L01126 (null)
L01348 (null)
L01950 L56789
L00857 (null)
L04651 (null)
L03762 (null)
所以试过
UPDATE (SELECT ho.HOOK_OFFICE_LETTER || LPAD(khc.HOOK_NO, 5, '0') AS hookey, eq.LOCATION_DESCRIPTION AS eqloc
FROM KEY_HOOK_CURRENT khc
INNER JOIN KEY_HOLDING kho ON khc.KEY_HOLDINGOID = kho.KEY_HOLDINGOID
INNER JOIN CONTRACT con ON kho.CUSTOMEROID = con.CUSTOMEROID
INNER JOIN VW_CURRENT_CONTRACT_PERIOD ccp ON con.CONTRACT_ID = ccp.CONTRACT_ID
INNER JOIN CONTRACT_PERIOD cp ON (ccp.CONTRACT_ID = cp.CONTRACT_ID AND ccp.CONTRACT_PERIOD = cp.CONTRACT_PERIOD)
INNER JOIN CONTRACT_EQUIP_PERIOD cep ON cp.CONTRACT_PERIODOID = cep.CONTRACT_PERIODOID
INNER JOIN EQUIPMENT eq ON cep.EQUIPMENTOID = eq.EQUIPMENTOID
INNER JOIN HOOK_OFFICE ho ON khc.HOOK_OFFICEOID = ho.HOOK_OFFICEOID
WHERE
eq.PRODUCT_ID = 'XXX' AND
(eq.LOCATION_DESCRIPTION IS NULL OR (ho.HOOK_OFFICE_LETTER || LPAD(khc.HOOK_NO, 5, '0')) <> eq.LOCATION_DESCRIPTION))
SET hookno = eqloc
but getting 01733 - "virtual column not allowed"
...和许多其他的查询,包括合并,但没有太多的经验,这么没有太大运气! :(
请注意:此查询将运行每隔10min 24/7所以它应该是相当快的(如果可能的话),并更新只在必要时
您的帮助,将不胜感激
感谢。!
在这里,MERGE语句是要走的路,但您需要一些方法来识别设备表中的哪些行需要更新。设备表的主键是什么? – Boneist
设备ID – novacky