Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


insert med underfråga

Postades av 2001-09-19 14:33:00 - Peter Bladh, i forum sql-server/msde, Tråden har 9 Kommentarer och lästs av 1224 personer

Hej, jag har problem med en insert-fråga. Jag skall plocka in allt (med vissa kriterier) från en tabell till en annan likadan. Men trots att jag i frågan kollar att det inte finns en likadan post så får jag felmeddelandet att jag försker sätta in ett likadant värde i ett unikt fält. Så här ser frågan ut :

begin transaction
insert into Caesar408.dbo.relcontactcode
select rcc.*
from c2.dbo.relcontactcode rcc
where rcc.contactcodeid = 843
and
rcc.relContactCodeID not in (select skarp.relContactCodeID
from Caesar408.dbo.relContactCode skarp)
and
rcc.ContactID not in (select skarp.ContactID
from Caesar408.dbo.relContactCode skarp)
commit transaction

Till saken hör kanske att det är binärfält som jämförs.

Tacksam för hjälp!

/Peter


Svara

Sv: insert med underfråga

Postades av 2001-09-19 19:04:00 - Andreas Hillqvist

Du kan ju optimera frågan genom att slå ihop underfrågerna.
Testa:

begin transaction

INSERT INTO Caesar408.dbo.relcontactcode
SELECT rcc.*
FROM c2.dbo.relcontactcode rcc
WHERE rcc.contactcodeid = 843
AND NOT EXISTS (SELECT Null
FROM Caesar408.dbo.relContactCode skarp
WHERE (rcc.relContactCodeID = skarp.relContactCodeID) Or
(rcc.ContactID = skarp.ContactID))

commit transaction


Svara

Sv: insert med underfråga

Postades av 2001-09-19 21:30:00 - Christoffer Hedgate

Vad får du av frågan då? Alltså, om du inte kör inserten, vad blir resultatet av selectfrågan då?


Svara

Sv: insert med underfråga

Postades av 2001-09-20 09:13:00 - Peter Bladh

hur menar du?


Svara

Sv: insert med underfråga

Postades av 2001-09-20 09:17:00 - Peter Bladh

funkar verkligen den här delen

> rcc.relContactCodeID = skarp.relContactCodeID

om fälten är av typen binary?

Andreas version av frågan fungerade tyvär inte bättre...


Svara

Sv: insert med underfråga

Postades av 2001-09-20 09:24:00 - Peter Bladh

ännu mer info:

tabellen heter relContactCode och har följande fält:

relContactCodeID (binary 16)
ContactCode (int)
ContactID (binary 16)

det finns ett index som består av en kombination av ContactCode och ContactID. Detta måste vara unikt och det är också där skon klämmer. Jag får följande felmeddelande:

Cannot insert duplicate key row in object 'relContactCode' with unique index 'UniqueCode'.
The statement has been terminated.

Hur löser jag detta?


Svara

Sv: insert med underfråga

Postades av 2001-09-20 13:00:00 - Peter Bladh

Kom på det...

Det fanns en dubletter i c2 plus liet andra fel... så här blev den fungerande frågan. får dock köra en fråga till för att stoppa in den ena raden i dubletten


begin transaction

INSERT INTO Caesar408.dbo.relcontactcode
(relContactCodeID, ContactCodeID, ContactID)

SELECT relContactCodeID, ContactCodeID, ContactID
FROM c2.dbo.relContactCode
WHERE ContactCodeID = 843
AND ContactID IN (SELECT q2.ContactID
FROM c2.dbo.relContactCode q2
WHERE q2.ContactCodeID = 843
GROUP BY q2.ContactID
HAVING COUNT(q2.ContactID)<2)
AND ContactID NOT IN (SELECT q3.ContactID
FROM Caesar408.dbo.relContactCode q3
WHERE q3.ContactCodeID = 843
)
AND ContactID IN (SELECT q4.ContactID
FROM Caesar408.dbo.Contact q4
)

commit transaction



select * from relcontactcode where contactcodeid = 843


'''''''''''''''''''''''''''''''''''''''''''
Tack för era tips!
/Peter


Svara

Sv: insert med underfråga

Postades av 2001-09-20 20:04:00 - Andreas Hillqvist

Okej dubletter i källtabellen. Inget jag tänkte på. Men tycker två underfråger och en gruppering är lite för mycket.

Borde inte denna fråga fungera?

begin transaction

INSERT INTO Caesar408.dbo.relcontactcode
SELECT DISTINCT rcc.*
FROM c2.dbo.relcontactcode rcc
WHERE rcc.contactcodeid = 843
AND NOT EXISTS (SELECT Null
FROM Caesar408.dbo.relContactCode skarp
WHERE (rcc.relContactCodeID = skarp.relContactCodeID) Or
(rcc.ContactID = skarp.ContactID))

commit transaction

Ytterligare ett alternativ. Men är tveksam till om denna fråga fungerar efter som alla fäl i resultatet inte ingår i aggregat funktioner eller vad det nu heter:

begin transaction

INSERT INTO Caesar408.dbo.relcontactcode
SELECT rcc.*
FROM c2.dbo.relcontactcode rcc
WHERE rcc.contactcodeid = 843
AND NOT EXISTS (SELECT Null
FROM Caesar408.dbo.relContactCode skarp
WHERE (rcc.relContactCodeID = skarp.relContactCodeID) Or
(rcc.ContactID = skarp.ContactID))
GROUP BY rcc.ContactID, rcc.relContactCodeID,

commit transaction



Beror ju på om fälten för dubletterna i källan är unika eller ej. Annars kommer ju inte DISTINCT begränsa urvalet.


Svara

Sv: insert med underfråga

Postades av 2001-09-21 08:13:00 - Peter Bladh

destinct fungerar inte eftersom posterna ändå är unika... men nu är det klart, så skit samma:)


Svara

Nyligen

  • 14:24 CBD regelbundet?
  • 14:23 CBD regelbundet?
  • 14:22 Har du märkt några verkliga fördel
  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 614
27 953
271 709
490
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies