Avatar billede kaptajnkemo Nybegynder
21. maj 2003 - 00:45 Der er 4 kommentarer og
1 løsning

vælg poster fra tabel 1 hvis de ikke findes i tabel 2

Jeg har to tabeller.

tabel1 indeholder kundeNr, VareNr
tabel2 indeholder kundeNr, VareNr, dato

Jeg vil gerne selecte de poster fra tabel1 som ikke er oprettet i tabel2 idag. Dvs. hvis kundeNr og VareNr fra tabel1 findes i tabel2 skal den tages med såfremt datofeltet ikke er dagsdato.

Hvordan gør jeg det?
Avatar billede mortrr Praktikant
21. maj 2003 - 01:21 #1
Hvis jeg har forstået den rigtigt, så:

select tabel1.* from tabel1
inner join tabel2 on tabel1.kundenr=tabel2.kundenr and tabel1.varenr=tabel2.varenr
where year(tabel2.dato)<>year(getdate()) and month(tabel2.dato)<>month(getdate()) day(tabel2.dato)<>day(getdate())
Avatar billede pierrehusted Nybegynder
21. maj 2003 - 07:18 #2
Hvad med sådan her ??


SELECT t1.*
FROM Tabel1 t1
LEFT OUTER JOIN tabel2 t2 ON t2.kundenr = t1.kundenr AND t2.varenr = t1 varenr
WHERE ISNULL(t2.dato, Current_Timestamp) > Current_timestamp - 1
Avatar billede kaptajnkemo Nybegynder
23. maj 2003 - 00:49 #3
Hm... sorry. Det ser ud til at det ikke kan gøres helt så simpelt som jeg gerne ville...

Jeg poster den sql-sætning jeg selv har rodet med, men som ikke virker. Så kan i se navnene på de felter og de rigtige tabelnavne som jeg gerne vil have med.

Smider lige lidt points oveni, for jeres ulejlighed...


SELECT ItemTable.ItemNum, ItemTable.ItemName, CustItemTable.ItemStock, CustItemTable.ManualSalesPricePiece, CustItemTable.EAN, CustItemTable.guid, InventoryCount.CountDate FROM ItemTable, CustItemTable, InventoryCount WHERE (ItemTable.guid = CustItemTable.ItemGuid AND CustItemTable.CustGuid = '{7D41BB30-8318-41EC-A6D0-C5AC69315187}' AND CustGuid NOT IN ( SELECT CustGuid FROM InventoryCount )) ORDER BY SortOrder ASC

Kort sagt... jeg vil vise værdierne hvis kombinationen af kundeNR (custGuid), vareNR (ItemGuid) og dags dato(CountDate) ikke findes i tabellen InventoryCount.

Håber det giver mening, ellers må i spørge.
Avatar billede mortrr Praktikant
23. maj 2003 - 01:03 #4
Det er vist for sent på aftenen. men evt noget lignende:

SELECT ItemTable.ItemNum, ItemTable.ItemName, CustItemTable.ItemStock, CustItemTable.ManualSalesPricePiece, CustItemTable.EAN, CustItemTable.guid FROM ItemTable, CustItemTable WHERE (ItemTable.guid = CustItemTable.ItemGuid AND CustItemTable.CustGuid = '{7D41BB30-8318-41EC-A6D0-C5AC69315187}' AND CustGuid NOT IN ( SELECT CustGuid FROM InventoryCount WHERE ItemTable.guid=InventoryCount.custguid and itemtable.itemguid=inventorycount.itemguid and year(countdate)<>year(getdate()) and month(countdate)<>month(getdate()) day(countdate)<>day(getdate()))) ORDER BY SortOrder ASC
Avatar billede kaptajnkemo Nybegynder
23. maj 2003 - 12:08 #5
jubihu!
Nu virker det....

Den rigtige sql-sætning ser sådan ud (hvis nogen er interesseret):

SELECT ItemTable.ItemNum, ItemTable.ItemName, CustItemTable.ItemStock, CustItemTable.ManualSalesPricePiece, CustItemTable.EAN, CustItemTable.guid FROM ItemTable INNER JOIN CustItemTable ON ItemTable.guid = CustItemTable.ItemGuid WHERE ((CustItemTable.CustGuid = '{FE8F9A80-2120-11C3-8000-E0960774CA8F}') AND (CustItemTable.CustGuid NOT IN (SELECT CustGuid FROM InventoryCount WHERE (CustItemTable.CustGuid = InventoryCount.custguid AND custitemtable.itemguid = inventorycount.itemguid AND InventoryCount.CountDate = '2003-05-23')))) ORDER BY SortOrder ASC

CountDate er selvf. en variabel som altid sættes til dagsdato. Og fejlen var at der bruges NOT IN og sammenlignes med en dato som er != dagsdato. Det skulle selvf. være "...NOT IN blahblah WHERE countDate = dagsdato".

Takker for hjælpen!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester