webForumDet fria alternativet

Får inte till en bra SQL(eller rubrik)

Databaser & SQL

10 svar · 563 visningar · startad av saw

Medlem sedan mars 20011 880 inlägg
Frågan#1

Jag har i Access via en fråga tagit fram denna SQL:en

SQL = "SELECT t_SongTitlar.ArrNo, t_SongTitlar.songtitel, t_SongTitlar.Forfattare, t_SongTitlar.Forfattare2, t_SongTitlar.Forfattare3, t_Album.Album, t_Kategori.Kategori " & _
" FROM t_Kategori INNER JOIN (t_Album INNER JOIN t_SongTitlar ON t_Album.CD_ID = t_SongTitlar.Album) ON t_Kategori.Kat_ID = t_SongTitlar.Kategori " & _
" WHERE t_SongTitlar.songtitel Like '" & strText & "'"

Mitt problem är att där det står forfattare( 2 och 3) så är det numeriska värden ifrån en tabell som heter t_forfattare (indexerat for_id som nyckel)
Jag kommer inte på hur jag skall få in det i tabellen, så att jag får in namnen istället för id numren(for_id).
Hjälp tack

Medlem sedan dec. 200012 464 inlägg
#2

Jag skrev om det då Access-varianten är väldigt svårläst.

Så, om jag inte har missförstått.

q = _
"SELECT tS.ArrNo, " & _
       "tS.songtitel, " & _
       "tS.Forfattare, " & _
       "tf1.Forfattare, " & _
       "tf2.Forfattare, " & _
       "tA.Album, " & _
       "tK.Kategori " & _
 "FROM  t_Kategori tk,t_album ta ,t_songTitlar ts, " & _ 
             "t_forfattare tf1, t_forfattare tf2 " & _
"where  ta.cd_id = ts.album " & _
  "and  ts.kategori = tk.kat_id " & _
  "and  ts.forfattare2 = tf1.for_id " & _
  "and  ts.forfattare3 = tf2.for_id " & _
  "and  t_SongTitlar.songtitel Like '" & strText & "'"

Du nämnde aldrig vilken kolumn från t_forfattare du ville hämta så jag gissade.

Medlem sedan mars 20011 880 inlägg
#3

Hej LarsG och tack.
Jag glömde dock skriva, det är inte på alla låtar som det finns forfattare2 och forfattare3.
Hur får man till det?
Jag får ett fel:
The column prefix 'tf2' does not mach with a table name or alias name used in the query.

Kan det vara ett tomt fält som gör det tro?

Medlem sedan dec. 200012 464 inlägg
#4

Felet du får beror på att jag missade en sak i mitt förra inlägg. Jag skrev tf istället för tf2 efter tabellnamnet. (Jag har editerat min post nu.)

Ok, om forfattare2 och forfattare3 kan vara null så finns det lite olika sätt

En variant är att du lagrar 0 i författare2 och författare3 om de inte finns och så lägger du en dummyrad i t_forfattare.

eller så borde följande gå

q = _
"SELECT tS.ArrNo, " & _
       "tS.songtitel, " & _
       "tS.Forfattare, " & _
       "(select Forfattare from t_forfattare where for_id = ts.forfattare2) , " & _
       "(select Forfattare from t_forfattare where for_id = ts.forfattare3) , " & _
       "tA.Album, " & _
       "tK.Kategori " & _
 "FROM  t_Kategori tk,t_album ta ,t_songTitlar ts " & _
"where  ta.cd_id = ts.album " & _
  "and  ts.kategori = tk.kat_id " & _
  "and  t_SongTitlar.songtitel Like '" & strText & "'"

eller

q = _
"SELECT tS.ArrNo, " & _
       "tS.songtitel, " & _
       "tS.Forfattare, " & _
       "tf1.Forfattare, " & _
       "tf2.Forfattare, " & _
       "tA.Album, " & _
       "tK.Kategori " & _
 "FROM  (((t_Kategori tk inner join t_songTitlar ts on ts.kategori = tk.kat_id )" & _
         " inner join t_album ta on ta.cd_id = ts.album) " & _ 
         " left outer join t_forfattare tf1 on ts.forfattare2 = tf1.for_id) " & _
         " left outer join t_forfattare tf2 on ts.forfattare3 = tf2.for_id " & _
"where t_SongTitlar.songtitel Like '" & strText & "'"
Medlem sedan mars 20011 880 inlägg
#5

Tack för din flit LarsG men nu tror jag att det spökar hör hos mig.
Jag får felet:

The column preflix 't_SongTitlar' does not match with a table name or alias used in the query.
Vad menas? Jag har ju en tabel som heter 't_SongTitlar' och det framgår ju klart och tydligt i SQL:en??

Medlem sedan mars 20011 880 inlägg
#6

Tack för din flit LarsG men nu tror jag att det spökar hör hos mig.
Jag får felet:

The column preflix 't_SongTitlar' does not match with a table name or alias used in the query.
Vad menas? Jag har ju en tabel som heter 't_SongTitlar' och det framgår ju klart och tydligt i SQL:en??
Jag har testat alla dina SQL:er nu, och det är ingen skillnad.

Medlem sedan dec. 200012 464 inlägg
#7

Lite slarvfel, blir lätt så när man inte kan testa

q = _
"SELECT tS.ArrNo, " & _
       "tS.songtitel, " & _
       "tS.Forfattare, " & _
       "(select Forfattare from t_forfattare where for_id = ts.forfattare2) , " & _
       "(select Forfattare from t_forfattare where for_id = ts.forfattare3) , " & _
       "tA.Album, " & _
       "tK.Kategori " & _
 "FROM  t_Kategori tk,t_album ta ,t_songTitlar ts " & _
"where  ta.cd_id = ts.album " & _
  "and  ts.kategori = tk.kat_id " & _
  "and  [b]ts[/b].songtitel Like '" & strText & "'"
Medlem sedan mars 20011 880 inlägg
#8

Sorry LarsG, nu är vi tillbaka till första början, den visar bara en siffra(for_id).
Jag förstår att du inte kan testa, men att du kan sitta och skriva så här otestat....
Jag är väldigt tacksam att du tar din tid.

Medlem sedan dec. 200012 464 inlägg
#9

Hur ser tabellen forfattare ut och hur ser din fråga ut just nu?

Kan du exemplifiera med lite data vad du får ut nu och vad du förväntar dig.

Medlem sedan mars 20011 880 inlägg
#10

Ledsen om jag har varit otydlig.
Tabellen t_forfattare:
for_id räknare
namn nvachar
(det räcker nog, jag vill bara ha ut namnet här)

"SELECT tS.ArrNo, " & _
       "tS.songtitel, " & _
       "tS.Forfattare, " & _
       "(select Forfattare from t_forfattare where for_id = ts.forfattare2) , " & _
       "(select Forfattare from t_forfattare where for_id = ts.forfattare3) , " & _
       "tA.Album, " & _
       "tK.Kategori " & _
 "FROM  t_Kategori tk,t_album ta ,t_songTitlar ts " & _
"where  ta.cd_id = ts.album " & _
  "and  ts.kategori = tk.kat_id " & _
  "and  ts.songtitel Like '" & strText & "'"

I tabellen t_songtitlar ligger författarna sparade som ett nummer, som är länkat till tabellen t_forfattare. Jag ville helst kunna i en SQL få fram namnet (så jag slipper ha flera SQL:er i samma SQL)
I bland så är det tre författare, ibland två, men oftast bara en.
Den data som jag vill ha ut är "egenskaperna" på en låt. Alltså namn författare cd-titel kategori mm.

Vad tror du, går det att lösa?

Medlem sedan dec. 200012 464 inlägg
#11
"SELECT tS.ArrNo, " & _
       "tS.songtitel, " & _
       "tS.Forfattare, " & _
       "(select namn from t_forfattare where for_id = ts.forfattare2) , " & _
       "(select namn from t_forfattare where for_id = ts.forfattare3) , " & _
       "tA.Album, " & _
       "tK.Kategori " & _
 "FROM  t_Kategori tk,t_album ta ,t_songTitlar ts " & _
"where  ta.cd_id = ts.album " & _
  "and  ts.kategori = tk.kat_id " & _
  "and  ts.songtitel Like '" & strText & "'"

Problemet var att jag bara gissade vad kolumnen i tabellen t_forfattare hette. I och med att det finns en kolumn som heter forfattare i t_songtitla så valdes den istället.

258 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)