Avatar billede pelskee Nybegynder
29. september 2005 - 16:46 Der er 6 kommentarer og
2 løsninger

Hvordan kobler man en ekstra tabel på sin sql søgning

Jeg har nedenstående sql men der er en fejl i 'vesselterminal'. For den værdi eksisterer ikke i den tabel jeg skal søge i men i stedet i den tabel som indeholder den bruger der oprettes en record med. Jeg kan koble brugertabellen på med værdien 'CivilRegistrationNumber' men ved ikke hvordan man gør.
Håber i kan hjælpe.

Inspiration til løsning (aner ikke om det hjælper eller forvirrer :):
AND CivilRegistrationNumber = (SELECT CivilRegistrationNumber FROM tblUsers WHERE vesselterminalID = " & Request.QueryString("vesselterminal") ")

SQL:

tsk_sql = "SELECT *  FROM dbo.tblInjury  WHERE (DateOfInjury between '" & ConvertToSqlDate(Request.Querystring("startdate")) & "' AND '" & ConvertToSqlDate(Request.Querystring("enddate")) & "') AND (SickDays between '" & (Request.Querystring("min")) & "' AND '" & (Request.Querystring("max")) & "') "

If Request.QueryString("vesselterminal")<>"" Then
tsk_sql = tsk_sql & "AND vesselterminalID = " & Request.QueryString("vesselterminal")
End if
If Request.QueryString("jobposition")<>"" Then
tsk_sql = tsk_sql & "AND jobpositionID = " & Request.QueryString("jobposition") & " "
End if
If Request.QueryString("injuryplace")<>"" Then
tsk_sql = tsk_sql & "AND injuryplaceID = " & Request.QueryString("injuryplace") & " "
End if
If Request.QueryString("injurynature")<>"" Then
tsk_sql = tsk_sql & "AND injurynatureID = " & Request.QueryString("injurynature") & " "
End if
If Request.QueryString("injurypart")<>"" Then
tsk_sql = tsk_sql & "AND injurypartID = " & Request.QueryString("injurypart") & " "
End if
tsk_sql = tsk_sql & "ORDER BY " & Request.QueryString("orderby") & " ASC"

'response.write tsk_sql
rsResults.Source = tsk_sql
Avatar billede locturian Nybegynder
29. september 2005 - 16:53 #1
Du kan gøre det på flere måder, men en løsning kunne være, istedet for en subselect ;

SELECT T1.Værdi, T2.Værdi
FROM Tabel 1 T1, Tabel2 T2
WHERE T1.Værdi = T2.Værdi

Så får du koblet en tabel mere på, og sætte nogle kriterier på...
Avatar billede kjulius Novice
01. oktober 2005 - 18:33 #2
Mon ikke en inner join til tblUsers skulle kunne klare den sag:

tsk_sql = "SELECT *  FROM dbo.tblInjury i INNER JOIN dbo.tblUsers u ON i.CivilRegistrationNumber = u.CivilRegistrationNumber WHERE (i.DateOfInjury between '" & ConvertToSqlDate(Request.Querystring("startdate")) & "' AND '" & ConvertToSqlDate(Request.Querystring("enddate")) & "') AND (i.SickDays between '" & (Request.Querystring("min")) & "' AND '" & (Request.Querystring("max")) & "') "

If Request.QueryString("vesselterminal")<>"" Then
tsk_sql = tsk_sql & "AND u.vesselterminalID = " & Request.QueryString("vesselterminal")
End if
If Request.QueryString("jobposition")<>"" Then
tsk_sql = tsk_sql & "AND i.jobpositionID = " & Request.QueryString("jobposition") & " "
End if
If Request.QueryString("injuryplace")<>"" Then
tsk_sql = tsk_sql & "AND i.injuryplaceID = " & Request.QueryString("injuryplace") & " "
End if
If Request.QueryString("injurynature")<>"" Then
tsk_sql = tsk_sql & "AND i.injurynatureID = " & Request.QueryString("injurynature") & " "
End if
If Request.QueryString("injurypart")<>"" Then
tsk_sql = tsk_sql & "AND i.injurypartID = " & Request.QueryString("injurypart") & " "
End if
tsk_sql = tsk_sql & "ORDER BY i." & Request.QueryString("orderby") & " ASC"
Avatar billede pelskee Nybegynder
03. oktober 2005 - 07:58 #3
hvad gør sådan en INNER JOIN ?
Avatar billede pelskee Nybegynder
12. oktober 2005 - 00:32 #4
output er tom.
hvis jeg lader mine søgefelter være tomme og udskriver sql ser den sådan ud:
SELECT * FROM dbo.tblInjury i INNER JOIN dbo.tblCarUser u ON i.CivilRegistrationNumber = u.CivilRegistrationNumber WHERE (i.DateOfInjury between '01-01-2000' AND '10-12-2005') AND (i.SickDays between '0' AND '999') ORDER BY i.CivilRegistrationNumber ASC
Avatar billede pelskee Nybegynder
12. oktober 2005 - 01:21 #5
løsningen blev en left join:

<%
Dim rsResults
Dim rsResults_numRows

Set rsResults = Server.CreateObject("ADODB.Recordset")
rsResults.ActiveConnection = MM_claims_conn_STRING
tsk_sql = "SELECT *  FROM dbo.tblInjury LEFT JOIN dbo.tblEmployee ON dbo.tblInjury.CivilRegistrationNumber = dbo.tblEmployee.CivilRegistrationNumberE "

If Request.QueryString("vesselterminal")<>"" Then
tsk_sql = tsk_sql & "AND vesselterminalID = " & Request.QueryString("vesselterminal") & " "
End if
If Request.QueryString("jobposition")<>"" Then
tsk_sql = tsk_sql & "AND jobpositionID = " & Request.QueryString("jobposition") & " "
End if

tsk_sql = tsk_sql & "WHERE (DateOfInjury between '" & ConvertToSqlDate(Request.Querystring("startdate")) & "' AND '" & ConvertToSqlDate(Request.Querystring("enddate")) & "') "


If Request.QueryString("min")<>"0" Then
tsk_sql = tsk_sql & "AND (SickDays between '" & (Request.Querystring("min")) & "' AND '" & (Request.Querystring("max")) & "') "
Else
If Request.QueryString("max")<>"999" Then
tsk_sql = tsk_sql & "AND (SickDays between '" & (Request.Querystring("min")) & "' AND '" & (Request.Querystring("max")) & "') "
End if
End if





If Request.QueryString("injuryplace")<>"" Then
tsk_sql = tsk_sql & "AND injuryplaceID = " & Request.QueryString("injuryplace") & " "
End if
If Request.QueryString("injurynature")<>"" Then
tsk_sql = tsk_sql & "AND injurynatureID = " & Request.QueryString("injurynature") & " "
End if
If Request.QueryString("injurypart")<>"" Then
tsk_sql = tsk_sql & "AND injurypartID = " & Request.QueryString("injurypart") & " "
End if
tsk_sql = tsk_sql & "ORDER BY " & Request.QueryString("orderby") & " ASC"

'response.write tsk_sql
rsResults.Source = tsk_sql

rsResults.CursorType = 0
rsResults.CursorLocation = 2
rsResults.LockType = 1
rsResults.Open()

rsResults_numRows = 0
%>
Avatar billede pelskee Nybegynder
12. oktober 2005 - 01:22 #6
kjulius
er du frisk på at dele point
Avatar billede kjulius Novice
12. oktober 2005 - 19:27 #7
Selvfølgelig...
Avatar billede pelskee Nybegynder
12. oktober 2005 - 22:13 #8
tak ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester