---
title: "SQL-syntax för underfråga"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/179598-sql-syntax-för-underfråga"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "Herman"
published: "2009-07-30T08:24:02.000Z"
updated: "2009-07-30T13:00:46.000Z"
replies: 5
views: 672
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/179598-sql-syntax-för-underfråga"
---

# SQL-syntax för underfråga

## #1 — Herman, 2009-07-30T08:24Z

Hej!

Jag har problem med att villkora på ett fält av typen nvarchar(12). 

I vanliga fall skriver jag bara:

```
SELECT * FROM t1 
WHERE t2_id = N'V'
```

för att få ut endast 'V', dvs. **inte**  inkludera 'W'. 

Men hur skriver man om man har en underfråga som returnerar en lista?

Skriver jag:

```
SELECT * FROM t1
WHERE t2_id IN 

(SELECT DISTINCT id 
FROM t2 INNER JOIN  t3 ON t2.pid = t3.pid
WHERE      t3.kod = 'ok')
```

så kommer både V och W (i de fallen id är V/W). Jag vill alltså att villkoret på t2_id ska göras exakt / unicode. 

Databasen är SQL server 2005.

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

## #2 — LarsG, 2009-07-30T09:11Z

```
select * 
  from t1
 where t2_id in 
    (select id 
        from t2 join t3 
          on t2.pid = t3.pid
       where t3.kod = 'ok'
          and t2.id <> n'W')
```

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

## #3 — nitro2k01, 2009-07-30T09:16Z

LarsG: Två kommentarer, efter vad jg hittade efter lite googlande.
1) Bör inte N-prefixet anges med versalt N?
2) Borde det inte gå att göra en riktig ("exakt") jämförelse genom att ange collation för sub-selecten? (Känns som ett fulhack att gå runt matchningen 'v' = 'w' med ett sådant specialfall.)

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

## #4 — Herman, 2009-07-30T09:22Z

Tack för svaret!

Det hade fungerat om jag vetat att det gällde just bara V/W. Jag vet inte innehållet på förhand. t2.id kan innehålla V/W och det är i jämförelsen med **t1.t2_id** som jag måste ha en exakt matchning för att inte få tillbaka felaktiga poster. 

t2.id kan som exempel innehålla:
1W
2W
1V
2W
...

och ger då underfrågan tillbaka 1V,2V så vill jag inte att huvudfrågan inkluderar 1W och 2W på grund av att villkoret i underfrågan inte sker med exaktheten som id=N'1V' ger. 

Hoppas jag är tydligare nu :)

Tillägg: 
Det jag vill göra är detta (vilket inte fungerear...)
SELECT \* FROM t1
WHERE t2_id IN 

**N'**(SELECT DISTINCT id 
FROM t2 INNER JOIN  t3 ON t2.pid = t3.pid
WHERE      t3.kod = 'ok')

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

## #5 — LarsG, 2009-07-30T12:34Z

```
select * 
  from t1
 where cast(t2_id  as binary(20)) in 
    (select cast(id as binary(20))
        from t2 join t3 
          on t2.pid = t3.pid
       where t3.kod = 'ok')
```

Alternativt så kan man, som nitro2k01 säger, använda en collation. T.ex. någon variant av english. Om man konverterar till binary så blir det också skiftlägeskänsligt :).

@notro2k01 Jo, det stämmer att det skall vara N enligt standard.

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

## #6 — Herman, 2009-07-30T13:00Z

Jag funderar på att arbeta bort att använda W som en del av detta id. Det är nog att be om problem att göra skillnad mellan v och w - även om det går att lösa så kan det säkert ställa till det i framtiden med andra sql-frågor. 

Jag testade lite med att CAST:a till varbinary, men det kan nog bli segt att ha det i en större lösning och jag vill heller inte, som du påpekar, kräva att man måste matcha skiftläge.  Som bonus var jag även tvungen att CAST:a underfrågan till nvarchar innan... att ändra om fälttypen är dock praktiskt omöjligt i ett kort perspektiv. Och på sikt blir det nog till att komplettera med ett heltalsfält för matchningen. 

Hua vad små saker kan ta tid i anspråk :)

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

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/179598-sql-syntax-för-underfråga
