的Informix不支持那種UPDATE與連接 - 看語法在IBM Informix 11.70 InfoCenter進行更新。當遇到它無法識別的語法時,它會給出錯誤-201。
如果Informix的不支持與加盟,然後怎麼可能加入表更新?無論如何,我必須稍後將此查詢轉換爲Hibernate。
我想現在進入休眠狀態,請...您的意思是,您希望我解釋您的查詢並解決如何執行該操作?沒有表的模式(主鍵,外鍵特別相關!)?你一定要在Hibernate中修復它;我從來沒有用過它。
下面是您的查詢,重新格式化爲我認爲更好的可讀性。
UPDATE a
SET a.export_flag ='Y'
FROM sc_ob_temp_audit AS a
JOIN sc_ob_allocation AS b
ON a.sc_ob_profile_code = b.sc_ob_profile_code
AND a.sc_orig_country= b.sc_orig_country
LEFT JOIN sc_fac_group AS f
ON b.sc_orig_country = f.sc_orig_country
AND b.sc_orig_sf_group_code = f.sc_fac_group_code
LEFT JOIN sc_ob_prod_group AS d -- ON clause missing (but there was a comma here)
JOIN gbl_produce AS e
ON d.sc_prod_cont_code = e.gp_cnt_cd
AND b.sc_orig_country= d.sc_orig_country -- Part of missing ON clause?
AND b.sc_prod_cont_group_code = d.sc_prod_group_code -- Part of missing ON clause?
WHERE a.sc_orig_country ='MY'
AND a.export_flag='N';
爲了我的未經訓練的人,看起來像寫作的複雜難辨方式:
UPDATE sc_ob_temp_audit
SET export_flag = 'Y'
WHERE sc_orig_country = 'MY'
AND export_flag = 'N'
然而,想必所有加盟做一些有用的東西,在某種程度上限制了一套被更新的行。因此,我們可以猜測,它的意思是這樣的:
UPDATE sc_ob_temp_audit
SET export_flag = 'Y'
WHERE sc_orig_country = 'MY'
AND export_flag = 'N'
AND sc_primary_key IN -- Guessed at column; no schema for the DB; no keys!
(SELECT a.sc_primary_key
FROM sc_ob_temp_audit AS a
JOIN sc_ob_allocation AS b
ON a.sc_ob_profile_code = b.sc_ob_profile_code
AND a.sc_orig_country = b.sc_orig_country
LEFT JOIN sc_fac_group AS f
ON b.sc_orig_country = f.sc_orig_country
AND b.sc_orig_sf_group_code = f.sc_fac_group_code
LEFT JOIN sc_ob_prod_group AS d
ON b.sc_orig_country = d.sc_orig_country
AND b.sc_prod_cont_group_code = d.sc_prod_group_code
JOIN gbl_produce AS e
ON d.sc_prod_cont_code = e.gp_cnt_cd
)
事實上,如果你沒有在sc_ob_temp_audit
表中單列主鍵,你必須使用一個相關子查詢與EXISTS來代替:
UPDATE sc_ob_temp_audit
SET export_flag = 'Y'
WHERE sc_orig_country = 'MY'
AND export_flag = 'N'
AND EXISTS
(SELECT * -- It does not matter what you list here in an EXISTS sub-query
FROM sc_ob_temp_audit AS a
JOIN sc_ob_allocation AS b
ON a.sc_ob_profile_code = b.sc_ob_profile_code
AND a.sc_orig_country = b.sc_orig_country
LEFT JOIN sc_fac_group AS f
ON b.sc_orig_country = f.sc_orig_country
AND b.sc_orig_sf_group_code = f.sc_fac_group_code
LEFT JOIN sc_ob_prod_group AS d
ON b.sc_orig_country = d.sc_orig_country
AND b.sc_prod_cont_group_code = d.sc_prod_group_code
JOIN gbl_produce AS e
ON d.sc_prod_cont_code = e.gp_cnt_cd
WHERE a.pk_column1 = sc_ob_temp_audit.pk_column1
AND a.pk_column2 = sc_ob_temp_audit.pk_column2
AND ...
)
我認爲這是一個工作的機會;子查詢中的WHERE子句應使用a
來標識子查詢中的審計表和全名,以在UPDATE語句中標識審計表。但是,考慮到晚上的時間,我有可能錯誤思考。
- > OUTER JOIN sc_ob_prod_group AS d,JOIN gbl_produce AS e – 2013-02-18 05:50:03