webForumDet fria alternativet

Plocka ut värden ur "anda tabellen" (in)

Databaser & SQL

14 svar · 892 visningar · startad av Mr T

Medlem sedan maj 20071 061 inlägg
Frågan#1

Har 2 tabeller

dom ser ut ungefär såhär:

[B]T_datum[/B]
id
datum
parent_namn_id
meddelande
[B]T_namn[/B]
id
owner_id
group_id
namn
adress

Har idag en SQL för att leta upp alla datum en viss dag som användaren har access till genom att vara medlem i olika grupper.

SELECT *, day(date) as dag FROM T_datum WHERE parent_namn_id in (SELECT id FROM T_name WHERE group_id LIKE 234 OR group_id LIKE 345) AND datum='20100219' ORDER BY dag

Vill nu ha tag i owner_id för att avgöra vem som äger adressen, men hur gör jag då ?

Medlem sedan dec. 20025 483 inlägg
#2
select
	t.*,
	n.owner_id,
	day(date) as dag
from
	t_datum d inner join t_name n
	on
	d.parent_namn_id = n.id and
	n.groupid in (234,345) and
	t.datum = '20100219'
order by
	dag
Medlem sedan maj 20071 061 inlägg
#3

Peter S - Var så glad när jag slapp join (detta då jag har svårt att greppa det) och kunde använda "in", men om det är enda sättet så....
Ska prova och återkomma med resultatet.

Medlem sedan dec. 20025 483 inlägg
#4

I detta fall är join det bästa sättet eftersom du vill hämta information från flera tabeller :)

Medlem sedan feb. 20041 816 inlägg
#5

Mr T skrev:

Peter S - Var så glad när jag slapp join (detta då jag har svårt att greppa det) och kunde använda "in", men om det är enda sättet så....

Vad är det du inte greppar med joins? Om du inte redan har läst artikeln nedan, läs igenom den och se om det fastnar bättre. Själv tycker jag att det mesta blir mycket enklare att förstå om man får något grafiskt att koppla till.

http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html

Medlem sedan maj 20071 061 inlägg
#6

Ser att jag gjort ett fel.
day(date) as dag
ska ju vara
day(datum) as dag

Så om jag fattar det rät ska det i join bli
day(d.datum) as dag
eller day(t.datum) as dag
(förstår inte varför det både finns t och d ?

Medlem sedan dec. 20025 483 inlägg
#7

T och n är alias för tabellerna som gör att man slipper skriva ut tabellnamnen varje gång man refererar till fälten. (Om ett fält F bara finns i en av tabellerna behöver man inte kvalificera fältet med tabellnamnet för att referera till det: tabell.F. Dock blir det tydligare att läsa koden om man talar om vilken tabell ett fält hör till.)

select
	d.*,
	n.owner_id,
	day(d.datum) as dag
from
	t_datum d inner join t_name n
	on
	d.parent_namn_id = n.id and
	n.groupid in (234,345) and
	d.datum = '20100219'
order by
	dag
Medlem sedan maj 20071 061 inlägg
#8

men vad är då "d" ?

Medlem sedan aug. 20039 340 inlägg
#9

d är ett "alias" för t_datum sow definieras som så:

from
	[b]t_datum d[/b] inner join [b]t_name n[/b]
Medlem sedan dec. 20025 483 inlägg
#10

Oops! :) Såg nu att jag blandat t med d på några ställen. Inlägg 7 är uppdaterat.

Medlem sedan maj 20071 061 inlägg
#11

Vi tar det från början, jag tror jag lurar mig själv.
d är alias för t_datum
n är alias för t_name
så långt är jag med, men var skapas t. t används ju bara plötsligt ? (eller är det när man skriver t.* som t blir namnet på den "sammanslagna" tabellen av d och n?)

Medlem sedan aug. 20039 340 inlägg
#12

Nu blev det lite förvirrat... Detta har hänt i ungefärlig kronologisk ordning:
Peter S skriver ett inlägg med ett mystiskt t.
Mr T skriver fel bokstav och undrar vad d är, när han menar t.
nitro2k01 missuppfattar frågan, missar Peters kodfel och svarar i all välmening att d är ett alias.
Peter S korrigerar sitt föregående inlägg och byter ut t mot d
Mr T undrar vad som står på.
Farbror najtro förklarar.

Medlem sedan maj 20071 061 inlägg
#13

Tack farbror najtro :-)
Det börjar klarna.

Medlem sedan maj 20071 061 inlägg
#14

Nu börjar saker funka. Inte undra på att jag hatar join när ni strular till det så för mig LOL
Skämpt åsido, det börjar klaran lite.

Medlem sedan maj 20071 061 inlägg
#15

Funkar toppen !

Stort tack grabbar !

263 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
118 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)