webForumDet fria alternativet

subselect

3 svar · 123 visningar · startad av kristoffer

kristofferMedlem sedan juni 20001 266 inlägg
#1

Varför fungerar inte följande: (tabellnamn osv förenklade)

SELECT *
FROM tabell1
WHERE tabell1.tabell2_id IN
        (SELECT tabell3.name, tabell2.name FROM tabell2 INNER JOIN tabell3 ON tabell2.tabell3_id = tabell3.id)

------------------
http://www.tavlingar.se

LarsGMedlem sedan dec. 200012 465 inlägg
#2

De värden som du gör jämförelsen med måste vara av samma typ och antal.

Du kan skriva


SELECT *
FROM tabell1
WHERE tabell1.tabell2_id IN
(SELECT tabell3.id FROM tabell2 INNER JOIN tabell3 ON tabell2.tabell3_id = tabell3.id)

om id-kolumnerna i tabell1 och tabell3 har samma typ.

En del dbms tillåter också att man skriver


SELECT *
FROM tabell1
WHERE (tabell1.name1,tabell1.name2) IN
(SELECT tabell3.name, tabell2.name FROM tabell2 INNER JOIN tabell3 ON tabell2.tabell3_id = tabell3.id)

--------------------------------------------------------------------------------

------------------
essentitia preter non sans multiplicandum

kristofferMedlem sedan juni 20001 266 inlägg
#3

Men vad är name1 och name2 i:

SELECT *
FROM tabell1
WHERE (tabell1.[b]name1[/b],tabell1.[b]name2[/b]) IN
(SELECT tabell3.name, tabell2.name FROM tabell2 INNER JOIN tabell3 ON tabell2.tabell3_id = tabell3.id)

Jag har ju inga fält i tabell1 som heter så? (Jag har SQL Server)

------------------
http://www.tavlingar.se

LarsGMedlem sedan dec. 200012 465 inlägg
#4

Det är fiktiva kolumnnamn.

Vad är det du vill söka?

------------------
essentitia preter non sans multiplicandum

Genererad på 376 ms · cache AV · v20260730165559-full.f96bc7eb