×åòâåðã, 19 Îêòÿáðÿ 2017 ã. 14:13
+ â öèòàòíèê
Çäðàâñòâóéòå!
Ïîìîãèòå, ïîæàëóéñòà, ðàçîáðàòüñÿ ñ òàêèì âîïðîñîì:
Èìååòñÿ äâå òàáëèöû, îáçîâåì äëÿ ïðîñòîòû Base è Import.
Çàäà÷à: îáíîâèòü òàáëèöó Base äàííûìè èç òàáëèöû Import, âñòàâëÿòü òîëüêî òå çàïèñè, êîòîðûõ íåò â Base
Ðåàëèçîâàë òàê:
INSERT INTO Base({..ñïèñîê ïîëåé..})
SELECT ({..ñïèñîê ïîëåé..}) FROM Import WHERE NOT EXISTS(
SELECT ({..ñïèñîê ïîëåé..}) FROM Base WHERE Base.field1=Import.field1 And Base.field2=Import.field2 And ... And Base.fieldn=Import.fieldn
))
Ïåðåä âñòàâêîé ïðîâåðÿåòñÿ êîëè÷åñòâî äîáàâëÿåìûõ ñòðîê:
SELECT (Count(*)) FROM Import WHERE NOT EXISTS(
SELECT ({..ñïèñîê ïîëåé..}) FROM Base WHERE Base.field1=Import.field1 And Base.field2=Import.field2 And ... And Base.fieldn=Import.fieldn
))
Âñå âðîäå ðàáîòàåò, íî â íåêîòîðûõ ñëó÷àÿõ êîëè÷åñòâî äîáàâëåííûõ ñòðîê ìåíüøå, ÷åì ïîêàçûâàåò çàïðîñ ñ Count. Ïðè àíàëèçå âûÿñíèëîñü, ÷òî èìåëî ìåñòî áûòü çàäâîåíèå îäèíàêîâûõ ñòðîê â òàáëèöå Import. Íî âåäü ïîäçàïðîñ íå ïðîâåðÿåò çàäâîåíèÿ â òàáëèöå Import, îí ðåàëèçóåò ðàçíîñòü ìåæäó Base è Import? Òàêîé ðåçóëüòàò ìîæíî îæèäàòü òîëüêî â òîì ñëó÷àå, åñëè âíåøíèé ïîäçàïðîñ â çàïðîñå INSER INTO ... SELECT âûïîëíÿåòñÿ íå îäèí ðàç ïåðåä âñòàâêîé, à ïîâòîðÿåòñÿ äëÿ êàæäîé ñòðîêè.
Äîãóãëèòñÿ äî èñòèíû ÿ íå ñìîã, ïîýòîìó ïðîøó îòâåòèòü, åñëè êòî çíàåò: â çàïðîñå
INSERT INTO ... SELECT
ïîäçàïðîñ âûïîëíÿåòñÿ îäèí ðàç äëÿ âñåãî ìàññèâà äàííûõ èëè äëÿ êàæäîé ñòðîêè ïîñëåäîâàòåëüíî â ïðîöåññå âñòàâêè?
http://www.sql.ru/forum/1274552/insert-into-select
-
Çàïèñü ïîíðàâèëàñü
-
0
Ïðîöèòèðîâàëè
-
0
Ñîõðàíèëè
-