04. marts 2009 - 20:27Der er
5 kommentarer og 1 løsning
Fjern række i Dataset, hvis kol. A findes i Kol. B
Jeg har lavet en SQL, der er ret kompleks - så kompleks at jeg lever med at den giver mig nogle uønskede rækker med i svaret. Disse skal nu fjernes fra datasettet efter nedenstående simpel regel:
De uønskede rækker kan identificeres således:
t_id p_id subject ---- ---- ----------------------- 35 34 1. indlæg i forum 36 35 SV:1. indlæg i forum 19 2 NYT emne 33 19 SV:NYT emne 3 2 Objektiver
Regel: Hvis t_id findes mindst en gang i p_id kolonnen, skal rækken t_id slettes.
Jeg har gang i noget vb.net kode, men er gået kold i arrays'ene:
For Each dr As DataRow In ds.Tables(0).Select() For Each dr2 as DataRow In ds.Tables(0).Select() if dr2("parent_id") = dr("topic_id") then dr.Delete() End If Next Next
Det fejler naturligvis, fordi den reelt checker på samme række; men er der nogen der kan vise mig hvordan sådan et array-check skal se ud for at virke?
Sørme, det lykkedes - men det var kringlet.. MS SQL kan ikke lave en 'CREATE OR REPLACE VIEW', men kræver et check først. Så det blev til 3 kald:
1. Slet gl. view, hvis det findes "IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'My_view') DROP VIEW My_view"
2. Oprettelse af View drillede også, da jeg fik en syntax error. Det fandt jeg så frem til kunne omgås, ved brug af EXEC( .. "EXEC(' CREATE VIEW CLJ_FORUMLIST AS SELECT ... ')"
3. Endelig skulle jeg jo så trække data ud, som beskrevet af arne_v: "SELECT * FROM My_view WHERE t_id NOT IN (SELECT p_id FROM My_view)"
Så lykkedes det også!
Arne_v du fortjener ihvertfald nogle af pointene, så læg lige et svar.
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.