---
title: "Krånglig sql fråga går det?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/91065-krånglig-sql-fråga-går-det"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "Addeladde"
published: "2003-11-23T17:08:48.000Z"
updated: "2003-12-05T22:34:16.000Z"
replies: 13
views: 326
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/91065-krånglig-sql-fråga-går-det"
---

# Krånglig sql fråga går det?

## #1 — Addeladde, 2003-11-23T17:08Z

Hej

Jag har två tabeller sidor och mallar med fälten sida_id, sida_kod, sida_mall i sidor och mall_id, mall_kod i mallar.

Jag vill att min sokfråga plockar ut alla sidor som innehåller en viss sökfras eller om en mall_innehåller sokfrasen så ska även den sidan plockas med om det finns en sida som utnyttjar den mallen.

Hur gör man detta? Kanske inte äns går i en sql-fråga??

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

## #2 — K@llen, 2003-11-23T17:12Z

Finns det någon relation mellan de två tabellerna?

Om det finns en relation skulle du kunna använda en left join.

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

## #3 — Addeladde, 2003-11-23T17:14Z

Det är en access databas men jag har inte gjort någon relation i access.

Men på tabellen sidor så finns det ett fält sida_mallID där id på mallen som sidan använder.

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

## #4 — LarsG, 2003-11-23T17:17Z

```
select * 
from sidor 
where sida_kod like '%<det du vill söka efter>%'
or sida_mall in (select mall_id 
from mallar
where mall_kod like '%<det du vill söka efter>%')
```

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

## #5 — Addeladde, 2003-11-23T17:19Z

LarsG om ingen sida använder den mallen plockas den ändå ut då?

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

## #6 — K@llen, 2003-11-23T17:19Z

```
SELECT sida_id, sida_kod, sida_mall, mall_id, mall_kod 
FROM sida s
LEFT JOIN mall m
ON s.sida_mallID = m.sida_mallID 
WHERE field1 LIKE '%" & searchString & "%'
```

Jämförelsen bör göras på båda sidor, men jag vet inte vilka fält du vill använda.

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

## #7 — Addeladde, 2003-11-23T18:27Z

Detta verkar fungera fin fint enligt mina tester i alla fall:

```
sqlString = "SELECT sida_kod, sida_mall, sida_publicering, sida_titel, sida_forfattare, sida_datum_start, sida_datum_slut, sida_indexera, sida_nyckelord, sida_id " &_
 "FROM sidor " &_
 "WHERE sida_publicering = 1 " &_ 
 "AND sida_kod LIKE '%kontaktupg%' " &_
 "OR sida_mall IN (SELECT mall_id " &_
 "FROM mallar " &_
 "WHERE mall_kod LIKE '%kontaktupg%')"
 SET sidorRS = Con.Execute( sqlString )
```

Återkommer om det inte skulle fungera helt klockrent.

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

## #8 — LarsG, 2003-11-23T18:33Z

Jag skulle nog lägga till lite parenteser i where. Vill du ha 

```
sqlString = "SELECT sida_kod, sida_mall, sida_publicering, sida_titel, sida_forfattare, sida_datum_start, sida_datum_slut, sida_indexera, sida_nyckelord, sida_id " &_
 "FROM sidor " &_
 "WHERE sida_publicering = 1 " &_ 
 "AND (sida_kod LIKE '%kontaktupg%' " &_
 "OR sida_mall IN (SELECT mall_id " &_
 "FROM mallar " &_
 "WHERE mall_kod LIKE '%kontaktupg%'))"
 SET sidorRS = Con.Execute( sqlString )
```

eller

```
sqlString = "SELECT sida_kod, sida_mall, sida_publicering, sida_titel, sida_forfattare, sida_datum_start, sida_datum_slut, sida_indexera, sida_nyckelord, sida_id " &_
 "FROM sidor " &_
 "WHERE (sida_publicering = 1 " &_ 
 "AND sida_kod LIKE '%kontaktupg%' ) " &_
 "OR sida_mall IN (SELECT mall_id " &_
 "FROM mallar " &_
 "WHERE mall_kod LIKE '%kontaktupg%'))"
 SET sidorRS = Con.Execute( sqlString )
```

?

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

## #9 — Addeladde, 2003-11-23T19:07Z

Varför paranteserna?

```
  sqlString = "SELECT sida_kod, sida_mall, sida_publicering, sida_titel, sida_forfattare, sida_datum_start, sida_datum_slut, sida_indexera, sida_nyckelord, sida_id " &_
    "FROM sidor " &_
    "WHERE sida_publicering = 1 " 
    IF specialMall = 1 THEN
      sqlString = sqlString &_
      "AND sida_kod LIKE '%"&sokfras&"%' " &_
      "OR sida_mall IN (SELECT mall_id " &_
      "FROM mallar " &_
      "WHERE mall_kod LIKE '%"&sokfras&"%')"
     END IF
     IF specialmall = 0 AND mallID <> 0 THEN
	   sqlString = sqlString &_
	  "AND sida_mall = " & mallID
     END IF
  SET sidorRS = Con.Execute( sqlString )
```

 

Så ser hela satsen ut. Ska jag fortfarande lägga in paranteserna?

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

## #10 — LarsG, 2003-11-23T20:55Z

Jo, det tycker jag.

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

## #11 — Addeladde, 2003-11-23T21:01Z

Vad är paranteserna till för då?

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

## #12 — K@llen, 2003-11-23T21:03Z

> **Addeladde skrev:**
>
> Vad är paranteserna till för då?

För att den ska prova alla OR. Annars avbryter den vid den första OR som ger träff.

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

## #13 — LarsG, 2003-11-23T21:13Z

Det är samma skillnad som mellan

(a and b) or c (1)

och

a and (b or c)  (2)

Om man skriver 

a and b or c  (3)

så finns det visserligen en förutbestämd ordning så att det tolkas som ett av ovanstående. Kan du svara på om (3) är samma sak som (1) eller (2)?

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

## #14 — Addeladde, 2003-12-05T22:34Z

Hur ska jag sätta mina paranteser i min sql-fråga då så att alla sidor och mallar uppdateras?

```
sqlString = "SELECT sida_kod, sida_mall, sida_publicering, sida_titel, sida_forfattare, sida_datum_start, sida_datum_slut, sida_indexera, sida_nyckelord, sida_id " &_
    "FROM sidor " &_
    "WHERE sida_publicering = 1 " 
    IF specialMall = 1 THEN
      sqlString = sqlString &_
      "AND sida_kod LIKE '%"&sokfras&"%' " &_
      "OR sida_mall IN (SELECT mall_id " &_
      "FROM mallar " &_
      "WHERE mall_kod LIKE '%"&sokfras&"%')"
     END IF
     IF specialmall = 0 AND mallID <> 0 THEN
	   sqlString = sqlString &_
	  "AND sida_mall = " & mallID
     END IF
  SET sidorRS = Con.Execute( sqlString )
```

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

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/91065-krånglig-sql-fråga-går-det
