所以这是我的数据库groupofficecom
我正在将元素从source
导入到cal_events
和cf_cal_events
。数据库有一些我无法改变的规则:
cal_events.id
是PRIMARY KEY并且有AUTO_INCREMENT cf_cal_events.model_id
是PRIMARY KEY, NOT 有AUTO_INCREMENT cf_cal_events.model_id = cal_events.id
ID_ELEMENT
是VIEW source
cf_cal_events.col_10 = source.ID_ELEMENT
我正在尝试执行一个定期添加source
到cal_events
和cf_cal_events
的元素的查询,因此需要应用以下内容:
INSERT
新事件(元素)INTO
两个表,考虑到:
cal_events.id
已自动增加,cf_cal_events.model_id
从cal_events.id
获取其值,如上图所示。source
与目的地之间的关系是通过cf_cal_events.col_10
列。 UPDATE
事件在源数据库中发生了变化。
DELETE
个事件(在源数据库中,有一个参数tinyint列ASUPPRIMER='1'
)
我不是要求别人去做我的工作,我正在寻求帮助解决我在代码中遇到的问题:
我可以将新项目插入cal_events
,但我无法将项目插入cf_cal_events
(结果全部重复)。那是我的尝试。
WHERE cf_cal_events.model_id = cal_events.id
和
INNER JOIN cf_cal_events
ON cf_cal_events.model_id = cal_events.id
都返回空结果
当我执行查询时,由于列的AUTO_INCREMENT,它会再次添加元素 ,但会添加新的id
。问题是我无法使用REPLACE INTO
或ON DUPLICATE KEY UPDATE
因为PRIMARY KEY必须相同才能使其正常工作。
这是我的数据库的SQL Fiddle。 谢谢大家!
这是我的插入代码:
INSERT INTO groupofficecom.cal_events (
calendar_id,
user_id,
start_time,
end_time,
name,
description,
location,
ctime,
mtime,
muser_id,
status
)
SELECT '5' AS calendar_id,
'3' AS user_id,
UNIX_TIMESTAMP(source.DATEDEBUT),
UNIX_TIMESTAMP(source.DATEFIN),
CONCAT(source.C219PRNOM,' ',source.C218NOM),
source.TYPEACTIONS,
source.C222LIEU,
UNIX_TIMESTAMP(source.CREATEDATE),
UNIX_TIMESTAMP(source.MODIF_DATE),
'',
'CONFIRMED' AS status
FROM source;
INSERT INTO groupofficecom.cf_cal_events (
model_id,
col_4,
col_5,
col_6,
col_7,
col_8,
col_9,
col_10
)
SELECT groupofficecom.cal_events.id,
source.C221CODECLIENT,
'' AS col_5,
'0' AS col_6,
source.C218NOM,
source.C219PRNOM,
source.TYPEACTIONS,
source.ID_ELEMENT
FROM source, groupofficecom.cal_events
INNER JOIN cf_cal_events
ON groupofficecom.cf_cal_events.model_id = groupofficecom.cal_events.id;
第一个INSERT
工作正常,但另一个返回空结果
答案 0 :(得分:1)
SELECT groupofficecom.cal_events.id,
source.C221CODECLIENT,
'' AS col_5,
'0' AS col_6,
source.C218NOM,
source.C219PRNOM,
source.TYPEACTIONS,
source.ID_ELEMENT
FROM source
INNER JOIN groupofficecom.cal_events
ON groupofficecom.cal_events.calendar_id = 5
AND groupofficecom.cal_events.user_id = 3
AND groupofficecom.cal_events.start_time = UNIX_TIMESTAMP(source.DATEDEBUT)
AND groupofficecom.cal_events.end_time = UNIX_TIMESTAMP(source.DATEFIN)
...
LEFT JOIN cf_cal_events
ON groupofficecom.cf_cal_events.model_id = groupofficecom.cal_events.id
WHERE groupofficecom.cf_cal_events.model_id IS NULL
这是cf_cal_events的插入查询。您必须从源到cal_events连接条件,迁移数据的方式,以获取先前插入的cal_events-rows。然后你必须加入到model_id上面的cf_cal_events来获取这些cal_events,它们在cf_cal_events中还没有引用。最后,您必须选择cal_events.id作为cf_cal_events的model_id。