---
title: "JOIN och LIKE"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/151911-join-och-like"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "inspiro"
published: "2006-09-30T18:51:59.000Z"
updated: "2006-09-30T20:47:36.000Z"
replies: 10
views: 660
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/151911-join-och-like"
---

# JOIN och LIKE

## #1 — inspiro, 2006-09-30T18:51Z

Hej! Jag skulle vilja ha typ en sån här sql-sats:

```
SELECT     UserObjects.UserID, ExchangeObjects.UserID AS ExchangeUserID, ExchangeObjects.Stuff
FROM         UserObjects INNER JOIN
                      ExchangeObjects ON UserObjects.Stuff [blue][B]LIKE %ExchangeObjects.Stuff%[/B][/blue]
WHERE     (UserObjects.UserID = 1)
```

Den blåmarkerade texten är problemet. Jag vill alltså hämta även de poster som bara innehåller en del av texten från UserObjects.Stuff på nåt sätt...

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

## #2 — LarsG, 2006-09-30T19:03Z

```
SELECT UserObjects.UserID, 
           ExchangeObjects.UserID AS ExchangeUserID, 
           ExchangeObjects.Stuff
  FROM  UserObjects INNER JOIN
           ExchangeObjects ON UserObjects.Stuff LIKE '%' || ExchangeObjects.Stuff || '%'
WHERE UserObjects.UserID = 1
```

Det där är aldrig bra i längden.

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

## #3 — inspiro, 2006-09-30T19:19Z

Varför inte? Menar du att det finns ett bättre sätt att göra samma sak eller att man inte ska göra så alls? Jag vill alltså att "hej" även ska plocka ut "hejsan"!

Jag får tyvärr "Incorrect syntax near '\|' när jag kör koden ovan...

Använder sql server 2005 om jag inte skrev det.

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

## #4 — LarsG, 2006-09-30T19:30Z

```
SELECT UserObjects.UserID, 
           ExchangeObjects.UserID AS ExchangeUserID, 
           ExchangeObjects.Stuff
  FROM  UserObjects INNER JOIN
           ExchangeObjects ON UserObjects.Stuff LIKE '%' + ExchangeObjects.Stuff + '%'
WHERE UserObjects.UserID = 1
```

Det som inte är bra är att du får sekventiella läsningar vilket oftast är förödande för prestanda.

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

## #5 — inspiro, 2006-09-30T20:04Z

Jag får tyvärr inte några träffar på delar av ord ändå. Det blir inget fel men svaren blir samma som om jag skulle ha UserObjects.Stuff = ExchangeObjects.Stuff ...

Vad menas med sekventiella läsningar? Går det att göra något liknande men med bättre prestanda?

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

## #6 — LarsG, 2006-09-30T20:18Z

Nej, det går inte att undvika sekventiella läsningar då du har like med inledande %

En sekventiell läsningar innebär att man läser all poster i tabellen.

kan du ge exempel på datainnehåll i de båda kolumnerna?

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

## #7 — emission, 2006-09-30T20:34Z

För att förtydliga det som LarsG påpekar..

Man får sekventella läsningar, vilket innebär att databasmotorn måste "loopa" igenom alla rader i tabellen och undersöka om de uppfyller kriteriet. 

Exempel:

SELECT \* FROM tabell WHERE kolumn LIKE 'a%'

Databasen kan kolla i ett index (om ett sådant existerar) och vet direkt att den bara behöver kontrollera de rader i indexet som börjar på "a". Indexet är, grovt förenklat, organiserat med begynnelsebokstäverna i alfabetisk ordning.

SELECT \* FROM tabell WHERE kolumn LIKE '%a'

Databasen vet helt plötsligt inget om hur den ska hitta raderna, och måste läsa igenom hela tabellen i jakt på rätt data.

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

## #8 — inspiro, 2006-09-30T20:34Z

Det är vanliga ord, testade exempelvis med "Bil" vilket jag försöker joina med "Bilar". Columnen är av typen nvarchar(50).

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

## #9 — emission, 2006-09-30T20:43Z

Det är inte så att du vänt på relationen?

```
SELECT UserObjects.UserID, 
           ExchangeObjects.UserID AS ExchangeUserID, 
           ExchangeObjects.Stuff
  FROM  UserObjects INNER JOIN
           ExchangeObjects ON ExchangeObjects.Stuff LIKE '%' + UserObjects.Stuff + '%'
WHERE UserObjects.UserID = 1
```

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

## #10 — inspiro, 2006-09-30T20:45Z

> **emission skrev:**
>
> SELECT \* FROM tabell WHERE kolumn LIKE '%a'
> 
> Databasen vet helt plötsligt inget om hur den ska hitta raderna, och måste läsa igenom hela tabellen i jakt på rätt data.

Ahaa, då är jag med... viss skillnad. Ett bättre alternativ är alltså att lägga varje ord i en egen kolumn och bara sätta % i slutet. Men det blir ju lite krångligare och viss funktionalitet förlorar jag ju ändå. Jag ska alltså göra en slags sökmotor tänkte jag!

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

## #11 — inspiro, 2006-09-30T20:47Z

Tack så mycket för all hjälp, visst hade jag vänt det hela fel!!! :)

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

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/151911-join-och-like
