---
title: "jämföra poster (förälder/barn-tabeller)"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/76348-jämföra-poster-förälder-barn-tabeller"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "doggelito"
published: "2003-05-08T15:07:04.000Z"
updated: "2003-05-13T07:43:31.000Z"
replies: 13
views: 358
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/databaser-sql/76348-jämföra-poster-förälder-barn-tabeller"
---

# jämföra poster (förälder/barn-tabeller)

## #1 — doggelito, 2003-05-08T15:07Z

Problemlösardags!
Har en tabell (Usertbl) med bla. kolumnen Userid.
Sen har jag en annan tabell (Relationtbl) med två kolumner, 
Userid och Menuid, samt en relation mellan de två tabellerna 
genom Userid, inget konstigt med detta alltså!

Nu vill jag jämföra Menuid i Relationtbl mellan två användare och
sedan få ett eof om de är identiska, hur skriver jag?

red/ gäller sql-2000server

Permalänk: https://www.webforum.nu/p/76348

## #2 — doggelito, 2003-05-09T08:11Z

behöver lite hjälp här!
är lite inne på att använda intersect men får inte det att funka.

detta borde väl gå att få ihop:

Usertbl:
   Userid=1
   Userid=2

Relationtbl:
   Userid=1
      Menuid=1
      Menuid=2

   Userid=2
      Menuid=1
      Menuid=2

i detta exempel har alltså användare 1 och 2 samma menuid.

det är inte nödvändigt att få ett eof, bara jag kan få ut true/false på nått vis om användarna är lika.

Permalänk: https://www.webforum.nu/p/1041487

## #3 — Engine^, 2003-05-09T12:13Z

```
SELECT Menuid FROM Relationtbl
WHERE Menuid NOT IN
  (SELECT Menuid FROM Relationtbl WHERE Userid = 2)
AND Userid = 1
```

Denna fråga borde ge dig ett EOF om båda användarna har samma Menuid:n

Permalänk: https://www.webforum.nu/p/1041644

## #4 — doggelito, 2003-05-09T12:26Z

hmm, har inte testat men blir det inte fel?
om användare 1 har menuid 1 och 2 samt 
att användare 2 har menuid 1,2 och 3.
då får jag väl ett eof då också, eller?

Permalänk: https://www.webforum.nu/p/1041658

## #5 — Engine^, 2003-05-09T12:33Z

Sant... det går väl att utöka det hela iofs...

```
SELECT Menuid FROM Relationtbl
WHERE Menuid NOT IN
  (SELECT Menuid FROM Relationtbl WHERE Userid = 2)
AND Userid = 1
GROUP BY Menuid
HAVING Count(*) = (SELECT Count(*) FROM Relationtbl Userid = 2)
```

Nu är jag inget vidare på det här med group by, men du kan ju testa och se om det fungerar :)

Permalänk: https://www.webforum.nu/p/1041672

## #6 — LarsG, 2003-05-09T16:49Z

Det hade varot lättare om SQL server hade haft stöd för except eller minus.

```
select distinct 1 from relationtbl r1
  where (select count(*) 
           from relationtbl r1, relationtbl r2
          where r1.userid = 1 and r2.userid = 2
            and r1.menuid = r2.menuid) = 
        (select count(*) from relationtbl
          where userid = 1)
   and (select count(*) from relationtbl
          where userid = 1) =
       (select count(*) from relationtbl
          where userid = 2)
```

Permalänk: https://www.webforum.nu/p/1041926

## #7 — doggelito, 2003-05-11T12:33Z

jag får inte någon av era koder att fungera. :( 
själv är jag inne på denna, jag tycker att den borde funka, eller?

```
if (select count(menuid) from Relationtbl where Userid = 1) =
(select count(menuid) from Relationtbl where Userid = 2)

SELECT menuid from Relationtbl Where Userid = 1
And Menuid Not In
(SELECT menuid from Relationtbl Where Userid = 2)
```

men när jag sedan kör koden får jag:
Operation is not allowed when the object is closed.

```
[b]if rs.eof then[/b]
response.write "ok"
else
response.write "tok"
end if
set rs = nothing
```

varför får jag denna felkod? 
jag provade också att sätta en if-tagg på om rs är ett objekt och det är det.

Permalänk: https://www.webforum.nu/p/1042986

## #8 — @nders, 2003-05-11T12:36Z

Har du verkligen exekverat SQL-frågan? Om man glömt att göra *rs.open strSQL, blah* brukar man kunna få den sortens fel.

Permalänk: https://www.webforum.nu/p/1042991

## #9 — doggelito, 2003-05-11T12:41Z

jo då, jag kör sql-frågan, som jag skrev, rs är ett objekt! :)
kan det vara nått med if-taggen i sql-strängen?
om inte första delen i strängen är lika så körs ju inte den undre delen.

Permalänk: https://www.webforum.nu/p/1042996

## #10 — @nders, 2003-05-11T12:50Z

> **doggelito skrev:**
>
> jo då, jag kör sql-frågan, som jag skrev, rs är ett objekt! :)

Det är inte samma sak. Eftersom man ofta skapar recordset med *set objRS = Server.CreateObject("ADODB.RecordSet")* så är det inte ovanligt att man har recordsetobjekt som skapade och giltiga, men som inte har öppnats, därav min fråga.

> **doggelito skrev:**
>
> kan det vara nått med if-taggen i sql-strängen?

Det har jag svårt att tänka mig. Fungerar asp-koden och din EOF-kontroll om du bara byter ut SQL-frågan till något elementärt?

> **doggelito skrev:**
>
> om inte första delen i strängen är lika så körs ju inte den undre delen.

Sant. Du kan ju prova att lägga till en else-sats i SQL-frågan också, så en SELECT alltid utförs.

Har du möjlighet att köra frågan i något annat verktyg, exempelvis Enterprise Manager?

(Jag vet alltså inte om den fråga du skrev i ditt tidigare inlägg är helt korrekt, men det borde kunna fungera.)

Permalänk: https://www.webforum.nu/p/1043004

## #11 — doggelito, 2003-05-11T13:08Z

> **@nders skrev:**
>
> Det är inte samma sak. Eftersom man ofta skapar recordset med...

det är ju sant förståss! jag kör dock alltid med en function som sköter öppningen av recordsetet så nog kör den sql-strängen allt.

> **@nders skrev:**
>
> Det har jag svårt att tänka mig. Fungerar asp-koden och din EOF-kontroll om du bara byter ut SQL-frågan till något elementärt?

ja!

> **@nders skrev:**
>
> Sant. Du kan ju prova att lägga till en else-sats i SQL-frågan också, så en SELECT alltid utförs.

ska testa det!

Permalänk: https://www.webforum.nu/p/1043020

## #12 — doggelito, 2003-05-12T11:33Z

tror jag hittade den fiffigaste koden! (om den nu är korrekt och om ingen skriver en smidigare förståss!)

```
if exists( 
	SELECT menuid from Relationtbl Where Userid = 1
	And Menuid Not In
	(SELECT menuid from Relationtbl Where Userid = 2))
	select 1 

else 
	if exists(

	SELECT menuid from Relationtbl Where Userid = 2
	And Menuid Not In
	(SELECT menuid from Relationtbl Where Userid = 1))
	select 1 

	else

	select 0
```

dock problem kvarstår:
i query analyzer stämmer svaren jag får men skriver jag response.write(rs(0)) på asp-sidan får jag alltid 1 tillbaka, vad kan detta bero på då? kan man inte använda rs(0) med denna sql-sträng?

Permalänk: https://www.webforum.nu/p/1043674

## #13 — doggelito, 2003-05-13T07:34Z

help please!
varför får jag bara ut 1 som värde på asp-sidan, inga ideér?
kan man skriva om sql-strängen så man verkligen får 1 eller 0 som resultat, om nu inte ovan är korrekt?

Permalänk: https://www.webforum.nu/p/1047541

## #14 — doggelito, 2003-05-13T07:43Z

va trött jag blir :x slarvfel! koden funkar.

Permalänk: https://www.webforum.nu/p/1047548

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/76348-jämföra-poster-förälder-barn-tabeller
