21. maj 2003 - 00:45Der 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.
Den moderne arbejdsplads er i stigende grad afhængig af mødelokaler til at fremme samarbejde, men dette skift medfører også stigende sikkerhedsudfordringer.
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())
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.
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
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!
Synes godt om
Ny brugerNybegynder
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.