Toon posts:

[SQL] Meerdere OUTER JOINS (relaties) tussen tabellen

Pagina: 1
Acties:
  • 276 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Beste Tweakers,

Ik ben nu bezig om mijn SQL Server 2000 database te koppelen met asp.net. Alles goed en wel maar ik wil een query bouwen die verder gaat dan wat de query builder volgens mij aan kan.

Het probleem is als volgt:

Ik heb 3 tabellen:

TBL_INCIDENT
incident_id
gebruiker_id - - - - - - - - - - - -> // De gebruiker die het incident heeft gemeld
toegekend_gebruiker_id - - -> // De gebruiker die het incident gaat oplossen
aangenomen_gebruiker_id- -> // De gebruiker die het incident heeft ingevoerd
status_id
...

TBL_STATUS
status_id
status_naam
status_omschrijving
...

TBL_GEBRUIKER
gebruiker_id
gebruiker_naam
gebruiker_login
....

Ik wil hiervan een query maken en dit in een datagrid plakken. Probleem is dat ik in mijn query welke alle incidenten moet laten zien die nog open staan 3 keer een gebruiker_naam nodig heb uit TBL_GEBRUIKER. Ik mag geen verschillende
outer_joins maken tussen dezelfde tabellen. Hoe kan ik dit probleem oplossen?

Mijn query tot nu toe:

SELECT * FROM TBL_GEBRUIKER RIGHT OUTER JOIN TBL_INCIDENT ON TBL_GEBRUIKER.GEBRUIKER_ID = TBL_INCIDENT.GEBRUIKER_ID
RIGHT OUTER JOIN TBL_INCIDENT ON TBL_GEBRUIKER.GEBRUIKER_ID = TBL_INCIDENT.TOEGEKEND_GEBRUIKER_ID
LEFT OUTER JOIN TBL_STATUS ON TBL_INCIDENT.INCIDENT_ID = TBL_STATUS.INCIDENT_ID


WHERE TBL_INCIDENT.IS_OPGELOST < 1

Wie kan mij helpen? 8)7

EDIT: hier de errormessage van de sql analyzer van SQL SERVER:

Server: Msg 1013, Level 15, State 1, Line 2
Tables or functions 'TBL_INCIDENT' and 'TBL_INCIDENT' have the same exposed names. Use correlation names to distinguish them.

[ Voor 9% gewijzigd door Verwijderd op 23-04-2004 13:08 ]


  • cimbom
  • Registratie: Juni 2001
  • Laatst online: 26-04-2024

cimbom

Just Kidding

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT 
 GEBR1.gebruiker_naam as 'Indiener',
 GEBR2.gebruiker_naam as 'Invoerder',
 GEBR3.gebruiker_naam as 'Oplosser'
FROM 
  TBL_INCIDENT as INS
    INNER JOIN TBL_GEBRUIKER as GEBR1 on GEBR1.GEBRUIKER_ID = INS.GEBRUIKER_ID
    INNER JOIN TBL_GEBRUIKER as GEBR2 on GEBR2.GEBRUIKER_ID = INS.aangenomen_gebruiker_id
    LEFT OUTER JOIN TBL_GEBRUIKER as GEBR3 on GEBR3.GEBRUIKER_ID = INS.toegekend_gebruiker_id
                INNER JOIN TBL_STATUS as STAT ON INS.INCIDENT_ID = stat.INCIDENT_ID
                

WHERE INS.IS_OPGELOST < 1

Zoiets?
Ik ga er vanuit dat de indiener en invoerder van een incident altijd ingevuld is. daarom ook inner joins bij die.

[ Voor 5% gewijzigd door cimbom op 23-04-2004 13:18 ]


  • mindcrash
  • Registratie: April 2002
  • Laatst online: 22-11-2019

mindcrash

Rebellious Monkey

Probeer eens iets als:

code:
1
2
3
4
5
SELECT <veldnamen> FROM TBL_INCIDENT AS i 
  LEFT JOIN TBL_GEBRUIKER AS g ON i.GEBRUKER_ID = g.GEBRUKER_ID 
  LEFT JOIN TBL_GEBRUIKER AS t ON i.GEBRUKER_ID = t.GEBRUKER_ID
  LEFT JOIN TBL_GEBRUIKER AS a ON i.GEBRUIKER_ID = a.GEBRUIKER_ID 
...


Wellicht helpt dat je wat op weg :)

edit:
hmmm... cimbom is me net voor met ongeveer hetzelfde idee :x

[ Voor 18% gewijzigd door mindcrash op 23-04-2004 13:21 ]

"The people who are crazy enough to think they could change the world, are the ones who do." -- Steve Jobs (1955-2011) , Aaron Swartz (1986-2013)


  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
Anders kun je in Book Online ook eens kijken bij aliases.

Never underestimate the power of


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Verwijderd schreef op 23 april 2004 @ 13:02:
Server: Msg 1013, Level 15, State 1, Line 2
Tables or functions 'TBL_INCIDENT' and 'TBL_INCIDENT' have the same exposed names. Use correlation names to distinguish them.
En heb je al op F1 gedrukt en 'correlation name' ingevuld? :?
Using Table Aliases
The readability of a SELECT statement can be improved by giving a table an alias, also known as a correlation name or range variable. A table alias can be assigned either with or without the AS keyword:

code:
1
2
table_name AS table alias
table_name table_alias


In this example, the alias p is assigned to publishers.

SQL:
1
2
3
USE pubs
SELECT p.pub_id, p.pub_name
FROM publishers AS p


If an alias is assigned to a table, all explicit references to the table in the Transact-SQL statement must use the alias, not the table name. For example, the following SELECT generates a syntax error because it uses the name of the table when an alias has been assigned:

SQL:
1
2
3
SELECT Customers.CustomerID, /* Illegal reference to Customers. */
       Cst.FirstName, Cst.LastName
FROM Northwind.dbo.Customers AS Cst

Professionele website nodig?


Verwijderd

Topicstarter
Jeeeh, het werkt :D

Mooi spul, dat sql!!!
Pagina: 1