---
title: "Where exists... + Union"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/77159-where-exists-union"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "Eclipse"
published: "2003-05-16T14:22:47.000Z"
updated: "2003-05-19T12:04:38.000Z"
replies: 6
views: 223
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/77159-where-exists-union"
---

# Where exists... + Union

## #1 — Eclipse, 2003-05-16T14:22Z

```
' ## SELECT NAVIGATION PER MENU
SQL = " SELECT n.intID, n.strName, 'TRUE', m.intID, m.strName, a.intID, u.intID " _
& " FROM navigation n, navigationMenu m, access a, users u " _
& " WHERE EXISTS " _ 
& " (SELECT a.intID, u.intID, n.intID, m.intID FROM access a, users u, navigation n, navigationMenu m WHERE " _
& " u.intID = " & request("ID") & " AND  u.intID = a.intUserID AND " _
& " a.intNavigationID = n.intID AND n.intMenuID = m.intID ) " _
& " UNION " _
& " SELECT n.intID, n.strName, 'FALSE', m.intID, m.strName, a.intID, u.intID " _
& " FROM navigation n, navigationMenu m, access a, users u " _
& " WHERE NOT EXISTS " _
& " (SELECT a.intID, u.intID, n.intID, m.intID FROM access a, users u, navigation n, navigationMenu m WHERE " _
& " u.intID = " & request("ID") & " AND u.intID = a.intUserID AND " _
& " a.intNavigationID = n.intID AND n.intMenuID = m.intID );"

set mySQL = Conn.Execute(SQL)
listNavigation = mySQL.GetRows()
```

Någon som ser ett uppenbart fel!?

Jag har testat olika varianter och denna variantern mer eller mindre sänker servern...

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

## #2 — aasah, 2003-05-16T15:30Z

Re: Where exists... + Union

> **enbart SQL:n skrev:**
>
> ' ## SELECT NAVIGATION PER MENU
> SELECT n.intID, n.strName, 'TRUE', m.intID, m.strName, a.intID, u.intID 
> FROM navigation n, navigationMenu m, access a, users u 
> WHERE EXISTS 
>    (SELECT a.intID, u.intID, n.intID, m.intID FROM access a, users u, navigation n, navigationMenu m 
>     WHERE u.intID = " & request("ID") & " AND  u.intID = a.intUserID AND a.intNavigationID = n.intID AND n.intMenuID = m.intID ) 
>    UNION 
>    SELECT n.intID, n.strName, 'FALSE', m.intID, m.strName, a.intID, u.intID 
>    FROM navigation n, navigationMenu m, access a, users u 
>    WHERE NOT EXISTS 
>         (SELECT a.intID, u.intID, n.intID, m.intID FROM access a, users u, navigation n, navigationMenu m 
>         WHERE u.intID = " & request("ID") & " AND u.intID = a.intUserID AND 
>         a.intNavigationID = n.intID AND n.intMenuID = m.intID );

Ska det röda &:et vara där?

Jag tycker det ser skumt ut, det borde bli syntaxfel???
Du har:

```
.... 
(SELECT a.intID, u.intID, n.intID, m.intID FROM ....
   UNION 
SELECT n.intID, n.strName, 'FALSE', m.intID, m.strName, a.intID, u.intID FROM ...
```

I den översta Selectsatsen plockar du ut 4 attribut att slå ihop med 7 attribut nedan! Eftersom en union slår ihop tabellerna på "höjden" borde det inte funka alls om du inte har lika många kolumner i bägge uttrycken och dessutom att kolumnerna har samma typ.

Sedan är det inte konstigt om det går segt. Dina joiner, som du har flera av, är mycket stora, dessutom har du många mängdoperationer, vilka tar mycket resurser.

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

## #3 — LarsG, 2003-05-16T15:52Z

Vad vill du ha för resultat? (Alltså inte den dubbla kryssprodukt som du försöker ta fram nu.)

Vissa lite exempel data och förväntat resultat.

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

## #4 — Eclipse, 2003-05-19T07:56Z

aasah : --\> Just det tecknet är korrekt.

\*\*\*
Jag vill att alla menyvl ska listas samt en TRUE eller en FALSE till dom man hgar behörighet till.

Jag har aldrig riktigt fattat Union men jag ska kolla din beskrivning ovan och se om jag närmar mig sanningen.

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

## #5 — Eclipse, 2003-05-19T07:58Z

Denna koden fungerar:

```
' ## SELECT SUBSCRIBERS PER TEMPLATE
SQL = " SELECT t.intID, t.strName, 'TRUE', ( SELECT count(*) FROM subscribers s WHERE s.intTemplateID = t.intID ) " _
& " FROM listTemplate t " _
& " WHERE EXISTS " _ 
& " (SELECT s.intID FROM subscribers s, users u WHERE s.intUserID = u.intID " _
& " AND s.intTemplateID = t.intID AND u.intID = " & request("ID") & ") " _
& " UNION " _
& " SELECT t.intID, t.strName, 'FALSE', ( SELECT count(*) FROM subscribers s WHERE s.intTemplateID = t.intID ) " _
& " FROM listTemplate t " _
& " WHERE NOT EXISTS " _
& " (SELECT s.intID FROM subscribers s, users u WHERE s.intUserID = u.intID " _
& " AND s.intTemplateID = t.intID AND u.intID = " & request("ID") &");"
```

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

## #6 — Eclipse, 2003-05-19T11:45Z

\[users\] --\> u
intID

\[access\] --\> a
intID
intUserID
intNavigationID

\[navigation\] --\> n
intID
intMenuID

\[navigationMenu\] --\> m
intID

Fungerande kod:

```
' ## SELECT NAVIGATION PER MENU
SQL = " SELECT n.intID, n.strName, 'TRUE' " _
& " FROM navigation n " _
& " WHERE EXISTS " _ 
& " (SELECT a.intID FROM access a, users u WHERE " _
& " u.intID = " & request("ID") & " AND  u.intID = a.intUserID AND " _
& " a.intNavigationID = n.intID ORDER BY n.intSortfield ) " _
& " UNION " _
& " SELECT n.intID, n.strName, 'FALSE'" _
& " FROM navigation n " _
& " WHERE NOT EXISTS " _
& " (SELECT a.intID FROM access a, users u WHERE " _
& " u.intID = " & request("ID") & " AND u.intID = a.intUserID AND " _
& " a.intNavigationID = n.intID ORDER BY n.intSortfield );"
```

Se bifogad bild:
Där det nu står siffror (id nummer) vill jag att det ska stå navigationMenu.strName. (Se tidigare kod!)

SQL = " SELECT n.intID, n.strName, 'TRUE', **m.intID, m.strName** " \_

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

## #7 — Eclipse, 2003-05-19T12:04Z

Den bifogade filen försvann visst på vägen.

Bilagor:

- [verktyget2.gif](https://www.webforum.nu/a/1472.gif)

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

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/77159-where-exists-union
