Syntax error (missing operator) in query expression ''.
calweek.asp, line 123
sql="SELECT n.N_datum, n.N_Id, k.Frukt_id, n.N_namn_id, w.W_weight"& _
" FROM (Calendar k LEFT JOIN"& _
" Users p ON k.namn_id = p.P_id) LEFT JOIN"& _
" notes n ON k.namn_id = n.N_namn_id AND k.datum = n.N_datum"& _
" Weight w k.namn_id = w.W_per_id AND k.datum = w.W_date"&_
" WHERE k.namn_id = " & Id & " AND k.datum = #" & d & "#"
Jag skulle vilja få med tabellen som heter "Weight" men det blir fel hur jag än vrider och vänder på detta.
Några idéer?
sql="SELECT n.N_datum, n.N_Id, k.Frukt_id, n.N_namn_id, w.W_weight"& _
" FROM (Calendar k LEFT JOIN"& _
" Users p ON k.namn_id = p.P_id) LEFT JOIN"& _
" notes n ON k.namn_id = n.N_namn_id AND k.datum = n.N_datum"& _
" Weight w k.namn_id = w.W_per_id AND k.datum = w.W_date"&_
" WHERE k.namn_id = " & Id & " AND k.datum = #" & d & "#"
response.write sql
response.end
SELECT n.N_datum, n.N_Id, k.Frukt_id, n.N_namn_id, w.W_weight FROM (Calendar k LEFT JOIN Users p ON k.namn_id = p.P_id) LEFT JOIN notes n ON k.namn_id = n.N_namn_id AND k.datum = n.N_datum Weight w k.namn_id = w.W_per_id AND k.datum = w.W_date WHERE k.namn_id = 22 AND k.datum = #2002-11-18#
Det kunde man ha sett på en gång om man tittat lite
sql="SELECT n.N_datum, n.N_Id, k.Frukt_id, n.N_namn_id, w.W_weight"& _
" FROM (Calendar k LEFT JOIN"& _
" Users p ON k.namn_id = p.P_id) LEFT JOIN"& _
" notes n ON k.namn_id = n.N_namn_id AND k.datum = n.N_datum"& _ --- här saknas något
" Weight w k.namn_id = w.W_per_id AND k.datum = w.W_date"&_
" WHERE k.namn_id = " & Id & " AND k.datum = #" & d & "#"
Skall det vara ytterligare en left join där weight ingår eller?
Access är ju speciellt med hur man får skriva join. Det brukar behövas en hel del parenteser
Så här kanske
sql="SELECT n.N_datum, n.N_Id, k.Frukt_id, n.N_namn_id, w.W_weight"& _
" FROM ((Calendar k LEFT JOIN"& _
" Users p ON k.namn_id = p.P_id) LEFT JOIN"& _
" notes n ON (k.namn_id = n.N_namn_id AND k.datum = n.N_datum)) LEFT JOIN "& _
" Weight on (w k.namn_id = w.W_per_id AND k.datum = w.W_date)"&_
" WHERE k.namn_id = " & Id & " AND k.datum = #" & d & "#"
Ahhh, jag flyttade en parantes till vänster om "w"- funkar nu, Tack.
sql="SELECT n.N_datum, n.N_Id, k.Frukt_id, n.N_namn_id, w.W_weight"& _
" FROM ((Calendar k LEFT JOIN"& _
" Users p ON k.namn_id = p.P_id) LEFT JOIN"& _
" notes n ON (k.namn_id = n.N_namn_id AND k.datum = n.N_datum)) LEFT JOIN "& _
" Weight [b]w on ([/b]k.namn_id = w.W_per_id AND k.datum = w.W_date)"&_
" WHERE k.namn_id = " & Id & " AND k.datum = #" & d & "#"
sql="SELECT n.N_datum, n.N_Id, k.Frukt_id, n.N_namn_id, w.W_weight"& _
" FROM ((Calendar k LEFT JOIN"& _
" Users p ON k.namn_id = p.P_id) LEFT JOIN"& _
" notes n ON (k.namn_id = n.N_namn_id AND k.datum = n.N_datum)) LEFT JOIN "& _
" Weight w on (k.namn_id = w.W_per_id AND k.datum = w.W_date)"&_
" WHERE k.namn_id = " & Id & " AND k.datum = #" & d & "#"
SQL = "SELECT n.Notes,n.N_datum,n.N_Id, k.Frukt_id, n.N_namn_id,w.W_weight" & vbCrLf & _
" FROM (Calendar k LEFT JOIN" & vbCrLf & _
" Weight w ON k.namn_id = w.W_per_id AND k.datum = w.W_date) LEFT JOIN" & vbCrLf & _
" notes n ON k.namn_id = n.N_namn_id AND k.datum = n.N_datum" & vbCrLf & _
" WHERE k.namn_id = " & Id & " AND k.datum = #" & d & "#"
Posterna som ligger i "weight-tabellen" syns om det är någon annan händelse i calendar tabellen med samma datum.
Men inte om det endast är en post på ett visst datum i weight-tabellen.
Konstigt!
Antagligen är jag dum i huvudet men det ända som skall vara lika i samtliga tabeller som skall hämtas är ju datumet och id:t.
Om så är fallet så skall de posterna skrivas ut, en post i weight, notes eller calender så skall detta skrivas ut på aktuellt datum.
De skall inte på annat sätt vara beroende av varandra.
Nu så skrivs weight ut endast om calender har en post med samma kriterier, det är FEL!
Hur gör man det?
Så här såg det ut förut men då blir det ju RIKTIGT fel:
SQL="select w.*,k.*,n.* "&_
" from Weight w,Calendar k,Notes n "&_
" where k.namn_id = w.W_per_id AND k.datum = w.W_date"&_
" or k.namn_id = n.N_namn_id AND k.datum = n.N_datum"&_
" or k.namn_id = " & Id & " AND k.datum = #" & d & "#"
Glöm all tidigare kod.(Jag vet inte vad jag håller på med)
Jag skulle villja få ut alla poster ifrån calender, weight, notes som har samma id och datum. Ingen av tabellerna skall ha något annat gemensamt än att id´t och datumet skall vara de samma.
Låt säga att jag har dessa poster i Arnes loop.(Arne har tex id=22)
2002-11-04
Notes: Här är en dum text...
Weight: 100kg
2002-12-05
Weight: 99kg
2002-12-08
Weight: 98kg
Calender: Tandläkaren
Varje datum skall kunna skriva ut poster ur samtliga tabeller om datumet är det samma.
SQL="select w.*,k.*,n.* "&_
" from Weight w,Calendar k,Notes n "&_
" where k.namn_id = w.W_per_id AND k.datum = w.W_date"&_
" and k.namn_id = n.N_namn_id AND k.datum = n.N_datum"&_
" and k.namn_id = " & Id & " AND k.datum = #" & d & "#"
Med dom förutsättningarna kan du inte göra en join.
Det ser mer ut som 3 olika frågor eller så kan du göra en union
select 'weight',weigth,'d' as notes ,datum from weight
where datum = #d# and id = 22
union
select 'notes' , 1, notes, datum from notes
where datum = #d# and id = 22
union
select 'kalender' , 1, kalender, datum from kalender
where datum = #d# and id = 22
order by datum
Du måste ha samma antal kolumner i varje select och värdena måste vara kompatibla. (därför 'd' och 1)
Nej, i och med att du läser i tre olika tabeller så tror jag inte att det har så stor betydelse vilket du väljer.
'd' och 1 är bara till för att de olika delfrågorna skall få kolumner av samma typ
Det går inte att skriva en fråga som
select integerKolumn from t1
union
select charKolumn from t2
Då kan man lägga till konstanter så att det blir jämförbara värden
select 'd',integerKolumn from t1
union
select charKolumn,1 from t2
Konstanten 'd' är jämförbar med charkolumnen i den andra frågan och integerKolumn är jämförbar med 1 i den andra frågan.
Om du väljer en lösning med union så använd
UNION ALL
det är effektivare eftersom union innebär att man tar bort dubletter vilket man inte gör med UNION ALL. För att ta bort dubletter så brukar man använda en temporärtabell vilket är rätt så kostsamt.
254 ms totalt · 4 externa anrop · v20260731065814-full.7d626504