[SQL] Select met 'sub-select'

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Swerfer
  • Registratie: Mei 2003
  • Laatst online: 06-06 18:13
Ik heb een vraag over een Select met een 'sub select', zie voorbeeld:

Tabel Namen:

code:
1
2
3
4
- ID           int
- Naam       nvarchar(50)
- EchteNaam bit
- TabelX_ID    int

code:
1
2
3
4
5
6
7
8
9
ID     Naam     EchteNaam     TabelX_ID

01     naam1    false         45
02     naam2    true          45
03     naam3    false         45
04     naam4    false         45
05     naam5    false         33
06     naam6    false         33
07     naam7    true          33

SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT 
    Naam,
    TabelX_ID,
    (
    SELECT
        Naam
    FROM
        Namen
    WHERE
        EchteNaam = 'true'
    AND
        TabelX_ID = xxxxx
    ) as EchteNaam
FROM 
    Namen


Op de plaats van xxxxx moet het resultaat 'TabelX_ID' komen van de basis-Select.

Het resultaat moet een lijst zijn met alle namen met in de 2e kolom bij elke naam in de 1e kolom de echte naam:
code:
1
2
3
4
5
6
7
naam1   naam2
naam2   naam2
naam3   naam2
naam4   naam2
naam5   naam7
naam6   naam7
naam7   naam7


Hoe kan ik dit verwezenlijken? Ik zou niet weten hoe ik dit moet omschrijven, dus Google heeft geen oplossing geboden...

[ Voor 34% gewijzigd door Swerfer op 28-10-2012 16:01 ]

Home Assistant | Unifi | LG 51MR.U44 | Volvo EX30 SMER+ Vapour Grey, trekhaak | SmartEVSE V3 | Cronos Crypto.com


Acties:
  • 0 Henk 'm!

  • DataGhost
  • Registratie: Augustus 2003
  • Laatst online: 00:46

DataGhost

iPL dev

Wat een raar model, je krijgt volgens mij alleen maar namen terug waarbij EchteNaam geset is :p je krijgt (Naam, NULL) als EchteNaam niet geset is en anders (Naam, Naam) waarbij beide Naam dus hetzelfde zijn. Anyway, hier heb je geen subselect voor nodig maar dit kan ook gewoon met een join. Anders moet je even kijken naar naamgeving van je kolommen zodat je daar in je subquery naar kan verwijzen.

[ Voor 16% gewijzigd door DataGhost op 28-10-2012 15:35 ]


Acties:
  • 0 Henk 'm!

  • Swerfer
  • Registratie: Mei 2003
  • Laatst online: 06-06 18:13
@DataGhost:

Ik heb de topicstart aangepast, ik had een fout gemaakt }:O

Gelijk maar wat verduidelijking aangebracht...

[ Voor 30% gewijzigd door Swerfer op 28-10-2012 15:53 ]

Home Assistant | Unifi | LG 51MR.U44 | Volvo EX30 SMER+ Vapour Grey, trekhaak | SmartEVSE V3 | Cronos Crypto.com


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 04-07 15:03

NMe

Quia Ego Sic Dico.

Beide tabellen een alias geven en die alias gebruiken om aan te geven welke tabel je bedoelt als je velden vergelijkt.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Swerfer
  • Registratie: Mei 2003
  • Laatst online: 06-06 18:13
NMe schreef op zondag 28 oktober 2012 @ 16:05:
Beide tabellen een alias geven en die alias gebruiken om aan te geven welke tabel je bedoelt als je velden vergelijkt.
Beide tabellen? Ik wil maar informatie halen uit één tabel... Die TableX_ID is wel een ID van een andere tabel, maar die moet er in mijn geval niet toe doen. Het is puur de 'key' waarmee je de namen kan koppelen aan een echte naam...

Home Assistant | Unifi | LG 51MR.U44 | Volvo EX30 SMER+ Vapour Grey, trekhaak | SmartEVSE V3 | Cronos Crypto.com


Acties:
  • 0 Henk 'm!

  • Raynman
  • Registratie: Augustus 2004
  • Laatst online: 14:48
Het idee blijft hetzelfde: je gebruikt één tabel twee keer, dus geef je bij elk van de 'FROM Namen' een andere alias op, zodat je iets als alias1.TableX_ID = alias2.TableX_ID kunt schrijven.

Acties:
  • 0 Henk 'm!

  • ValHallASW
  • Registratie: Februari 2003
  • Niet online
Swerfer schreef op zondag 28 oktober 2012 @ 16:11:
[...]

Beide tabellen? Ik wil maar informatie halen uit één tabel... Die TableX_ID is wel een ID van een andere tabel, maar die moet er in mijn geval niet toe doen. Het is puur de 'key' waarmee je de namen kan koppelen aan een echte naam...
Wikipedia: Alias (SQL)

dus:

SQL:
1
2
3
4
5
6
SELECT ..., 
   ( SELECT ...
      FROM table AS table_inner
      WHERE table_inner.col = table_outer.col
   )
FROM table as table_outer

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 04-07 15:03

NMe

Quia Ego Sic Dico.

Swerfer schreef op zondag 28 oktober 2012 @ 16:11:
[...]

Beide tabellen? Ik wil maar informatie halen uit één tabel... Die TableX_ID is wel een ID van een andere tabel, maar die moet er in mijn geval niet toe doen. Het is puur de 'key' waarmee je de namen kan koppelen aan een echte naam...
Dat het voor jou dezelfde tabel is wil niet zeggen dat je DBMS het ten tijde van je subquery daarmee eens is. :P Je hebt twee sets data, dat die uit dezelfde tabel komen is niet relevant. Dus: beide datasets een eigen alias geven en die alias gebruiken om je DBMS duidelijk te maken welke tabel je bedoelt.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Swerfer
  • Registratie: Mei 2003
  • Laatst online: 06-06 18:13
Bedankt, ik heb het voor elkaar gekregen.

Home Assistant | Unifi | LG 51MR.U44 | Volvo EX30 SMER+ Vapour Grey, trekhaak | SmartEVSE V3 | Cronos Crypto.com


Acties:
  • 0 Henk 'm!

  • Rotterdammertje
  • Registratie: Juni 2002
  • Laatst online: 28-03-2023
Wel zo aardig als je je oplossing dan ook post; dan hebben andere mensen er ook nog iets aan.

main = putStr (q ++ show q); q = "main = putStr (q ++ show q); q = "


Acties:
  • 0 Henk 'm!

  • Swerfer
  • Registratie: Mei 2003
  • Laatst online: 06-06 18:13
Sorry, hier de oplossing:
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SELECT 
        A.Naam as Naam,
        A.TableX_ID,
        (SELECT
            B.Naam
        FROM
            Namen as B
        WHERE
            B.EchteNaam = 'true'
        AND
            B.TabelX_ID = A.TabelX_ID) as EchteNaam
    FROM 
        Namen as A
    WHERE
        A.Naam LIKE '%' + @SearchQuery COLLATE SQL_Latin1_General_Cp850_CI_AI
    ORDER BY 
        A.Naam

Home Assistant | Unifi | LG 51MR.U44 | Volvo EX30 SMER+ Vapour Grey, trekhaak | SmartEVSE V3 | Cronos Crypto.com

Pagina: 1