• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 441
  • Last Modified:

How to make this query ?

Hi!

Have this query

SELECT
    dbo.KJE_FLINKTOTAL.MKjede1,
    dbo.KJE_KJEDE.Kjedenavn,
    dbo.KJE_KJEDE.Kjedenummer,
    dbo.KJE_FLINKTOTAL.RKjede1
FROM
    dbo.KJE_FLINKTOTAL
INNER JOIN
    dbo.KJE_KJEDE
ON
    (
        dbo.KJE_FLINKTOTAL.MKjede1 = dbo.KJE_KJEDE.Kjedenummer)
AND (
        dbo.KJE_FLINKTOTAL.RKjede1 = dbo.KJE_KJEDE.Kjedenummer)
INNER JOIN
    dbo.KJE_KJEDEREG
ON
    (
        dbo.KJE_FLINKTOTAL.LoepeNr = dbo.KJE_KJEDEREG.Lopenummer) ;

Open in new window


Need to get the dbo.KJE_KJEDE.Kjedenavn from this JOIN
dbo.KJE_FLINKTOTAL.RKjede1 = dbo.KJE_KJEDE.Kjedenummer

The problem is that dbo.KJE_KJEDE.Kjedenavn is used on this JOIN
dbo.KJE_FLINKTOTAL.MKjede1 = dbo.KJE_KJEDE.Kjedenummer

If i try to insert dbo.KJE_KJEDE.Kjedenavn after dbo.KJE_FLINKTOTAL.RKjede1
i get the same dbo.KJE_KJEDE.Kjedenavn as for dbo.KJE_FLINKTOTAL.MKjede1


How can i fix this ?
0
team2005
Asked:
team2005
  • 5
  • 5
  • 3
  • +1
1 Solution
 
jogosCommented:
<<The problem is that dbo.KJE_KJEDE.Kjedenavn is used on this JOIN
dbo.KJE_FLINKTOTAL.MKjede1 = dbo.KJE_KJEDE.Kjedenummer>>

Don't see KJE_KJEDE.Kjedenavn in that comparison.

<<If i try to insert dbo.KJE_KJEDE.Kjedenavn after dbo.KJE_FLINKTOTAL.RKjede1
i get the same dbo.KJE_KJEDE.Kjedenavn as for dbo.KJE_FLINKTOTAL.MKjede1>>
It's both same table, so the join always will be for same records, the order does not matter.
If you want different joins for both conditions then you must join the same table twice
FROM    dbo.KJE_FLINKTOTAL as t
INNER JOIN     dbo.KJE_KJEDE as k1
ON    (       t.MKjede1 = k1.Kjedenummer
          and   k1.Kjedenavn = ??????? )
INNER JOIN     dbo.KJE_KJEDE as k2
on        t.RKjede1 =k2.Kjedenummer

Open in new window

0
 
ValentinoVBI ConsultantCommented:
I'm not getting what your exact problem is, could you rephrase a little?

Are you trying to get the Kjedenavn from a different table?  The way the field is referenced in the SELECT, dbo.KJE_KJEDE.Kjedenavn, includes the table name (dbo.KJE_KJEDE).  If you need the same field from FlinkTotal then you should add the following to your SELECT:

dbo.KJE_FLINKTOTAL.Kjedenavn
0
 
gpizzutoCommented:
Use an alias:

INNER JOIN dbo.KJE_KJEDE KK2
ON dbo.KJE_FLINKTOTAL.MKjede1 = KK2.Kjedenummer

and Select KK2.Kjedenummer

(KK2 is an alias for your table)
0
What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

 
team2005Author Commented:
Hi!

I wil try to explane better.

Here is the query i want:

SELECT
    dbo.KJE_FLINKTOTAL.MKjede1,
    dbo.KJE_KJEDE.Kjedenavn 'Navn1',
    dbo.KJE_KJEDE.Kjedenummer,
    dbo.KJE_FLINKTOTAL.RKjede1,
    dbo.KJE_KJEDE.Kjedenavn 'Navn2',
    dbo.KJE_KJEDEREG.Lopenummer,
    dbo.KJE_FLINKTOTAL.LoepeNr,
    dbo.KJE_KJEDEREG.Besoksadresse,
    dbo.KJE_KJEDEREG.postnrbesok,
    dbo.KJE_KJEDEREG.Postadresse,
    dbo.KJE_KJEDEREG.Postnrpost,
    dbo.KJE_FLINKTOTAL.RKjede2,
    dbo.KJE_KJEDE.Kjedenavn 'Navn3'
FROM
    dbo.KJE_FLINKTOTAL
INNER JOIN
    dbo.KJE_KJEDE
ON
    (
        dbo.KJE_FLINKTOTAL.MKjede1 = dbo.KJE_KJEDE.Kjedenummer)
AND (
        dbo.KJE_FLINKTOTAL.RKjede1 = dbo.KJE_KJEDE.Kjedenummer)
AND (
        dbo.KJE_FLINKTOTAL.RKjede2 = dbo.KJE_KJEDE.Kjedenummer)
INNER JOIN
    dbo.KJE_KJEDEREG
ON
    (
        dbo.KJE_FLINKTOTAL.LoepeNr = dbo.KJE_KJEDEREG.Lopenummer) ;

Open in new window


If you lock at the included picture.

MKjede1, RKjede1 and RKjede2 is JOIN to the same field in KJEDE
= dbo.KJE_KJEDE.Kjedenummer

The result from the query is that

Navn2 = Navn1
Navn3 = Navn1

I want :

Navn1 -> Get from dbo.KJE_FLINKTOTAL.MKjede1 = dbo.KJE_KJEDE.Kjedenummer
Navn2 -> Get from dbo.KJE_FLINKTOTAL.RKjede1 = dbo.KJE_KJEDE.Kjedenummer
Navn3 -> Get from dbo.KJE_FLINKTOTAL.RKjede2 = dbo.KJE_KJEDE.Kjedenummer

But how ?
tables.png
0
 
ValentinoVBI ConsultantCommented:
try this:

select
      FT.MKjede1,
    MK1.Kjedenavn 'Navn1',
    MK1.Kjedenummer,
    FT.RKjede1,
    RK1.Kjedenavn 'Navn2',
    RK1.Lopenummer,
    FT.LoepeNr,
    REG.Besoksadresse,
    REG.postnrbesok,
    REG.Postadresse,
    REG.Postnrpost,
    FT.RKjede2,
    RK2.Kjedenavn 'Navn3'
FROM dbo.KJE_FLINKTOTAL FT
INNER JOIN dbo.KJE_KJEDE MK1 on MK1.Kjedenummer = FT.MKjede1
INNER JOIN dbo.KJE_KJEDE RK1 on RK1.Kjedenummer = FT.RKjede1
INNER JOIN dbo.KJE_KJEDE RK2 on RK2.Kjedenummer = FT.RKjede2
INNER JOIN dbo.KJE_KJEDEREG REG ON FT.LoepeNr = REG.Lopenummer

By joining the same table multiple times, each time using a different foreign key, you can access the records in the other table (KJE_KJEDE) in each context.
0
 
gpizzutoCommented:
SELECT
    dbo.KJE_FLINKTOTAL.MKjede1,
    dbo.KJE_KJEDE.Kjedenavn 'Navn1',
    dbo.KJE_KJEDE.Kjedenummer,
    dbo.KJE_FLINKTOTAL.RKjede1,
    dbo.KK2.Kjedenavn 'Navn2',
    dbo.KJE_KJEDEREG.Lopenummer,
    dbo.KJE_FLINKTOTAL.LoepeNr,
    dbo.KJE_KJEDEREG.Besoksadresse,
    dbo.KJE_KJEDEREG.postnrbesok,
    dbo.KJE_KJEDEREG.Postadresse,
    dbo.KJE_KJEDEREG.Postnrpost,
    dbo.KJE_FLINKTOTAL.RKjede2,
    dbo.KJE_KJEDE.Kjedenavn 'Navn3'
FROM dbo.KJE_FLINKTOTAL
INNER JOIN dbo.KJE_KJEDE 
ON (dbo.KJE_FLINKTOTAL.MKjede1 = dbo.KJE_KJEDE.Kjedenummer)
AND (dbo.KJE_FLINKTOTAL.RKjede1 = dbo.KJE_KJEDE.Kjedenummer)
INNER JOIN dbo.KJE_KJEDEREG ON (dbo.KJE_FLINKTOTAL.LoepeNr = dbo.KJE_KJEDEREG.Lopenummer) 
INNER JOIN dbo.KJE_KJEDE KK2
ON (dbo.KJE_FLINKTOTAL.RKjede2 = KK2.Kjedenummer) 

Open in new window

0
 
team2005Author Commented:
Hi!

Tryed this:

select
      FT.MKjede1,
    MK1.Kjedenavn 'Navn1',
    MK1.Kjedenummer,
    FT.RKjede1,
    RK1.Kjedenavn 'Navn2',
    RK1.Lopenummer,
    FT.LoepeNr,
    REG.Besoksadresse,
    REG.postnrbesok,
    REG.Postadresse,
    REG.Postnrpost,
    FT.RKjede2,
    RK2.Kjedenavn 'Navn3'
FROM dbo.KJE_FLINKTOTAL FT
INNER JOIN dbo.KJE_KJEDE MK1 on MK1.Kjedenummer = FT.MKjede1
INNER JOIN dbo.KJE_KJEDE RK1 on RK1.Kjedenummer = FT.RKjede1
INNER JOIN dbo.KJE_KJEDE RK2 on RK2.Kjedenummer = FT.RKjede2
INNER JOIN dbo.KJE_KJEDEREG REG ON FT.LoepeNr = REG.Lopenummer

Open in new window


Get this erro message:
Error Code: 207, SQL State: 42S22]  Invalid column name 'Lopenummer'.

Tryed to change REG.Lopenummer = dbo.KJE_KJEDEREG

Give this error message:
[Error Code: 4104, SQL State: S1000]  The multi-part identifier "dbo.KJE_KJEDEREG.Lopenummer" could not be bound. 2) [Error Code: 207, SQL State: 42S22]  Invalid column name 'Lopenummer'.


Then i tryed this code:

SELECT
    dbo.KJE_FLINKTOTAL.MKjede1,
    dbo.KJE_KJEDE.Kjedenavn 'Navn1',
    dbo.KJE_KJEDE.Kjedenummer,
    dbo.KJE_FLINKTOTAL.RKjede1,
    dbo.KK2.Kjedenavn 'Navn2',
    dbo.KJE_KJEDEREG.Lopenummer,
    dbo.KJE_FLINKTOTAL.LoepeNr,
    dbo.KJE_KJEDEREG.Besoksadresse,
    dbo.KJE_KJEDEREG.postnrbesok,
    dbo.KJE_KJEDEREG.Postadresse,
    dbo.KJE_KJEDEREG.Postnrpost,
    dbo.KJE_FLINKTOTAL.RKjede2,
    dbo.KJE_KJEDE.Kjedenavn 'Navn3'
FROM dbo.KJE_FLINKTOTAL
INNER JOIN dbo.KJE_KJEDE 
ON (dbo.KJE_FLINKTOTAL.MKjede1 = dbo.KJE_KJEDE.Kjedenummer)
AND (dbo.KJE_FLINKTOTAL.RKjede1 = dbo.KJE_KJEDE.Kjedenummer)
INNER JOIN dbo.KJE_KJEDEREG ON (dbo.KJE_FLINKTOTAL.LoepeNr = dbo.KJE_KJEDEREG.Lopenummer) 
INNER JOIN dbo.KJE_KJEDE KK2
ON (dbo.KJE_FLINKTOTAL.RKjede2 = KK2.Kjedenummer) 

Open in new window


Gives me this error message:

 [Error Code: 4104, SQL State: S1000]  The multi-part identifier "dbo.KK2.Kjedenavn" could not be bound.
0
 
gpizzutoCommented:
Delete dbo. before KK2
0
 
ValentinoVBI ConsultantCommented:
Sorry, copy/paste issue in SELECT list, here's the corrected version:

select
      FT.MKjede1,
    MK1.Kjedenavn 'Navn1',
    MK1.Kjedenummer,
    FT.RKjede1,
    RK1.Kjedenavn 'Navn2',
    REG.Lopenummer,
    FT.LoepeNr,
    REG.Besoksadresse,
    REG.postnrbesok,
    REG.Postadresse,
    REG.Postnrpost,
    FT.RKjede2,
    RK2.Kjedenavn 'Navn3'
FROM dbo.KJE_FLINKTOTAL FT
INNER JOIN dbo.KJE_KJEDE MK1 on MK1.Kjedenummer = FT.MKjede1
INNER JOIN dbo.KJE_KJEDE RK1 on RK1.Kjedenummer = FT.RKjede1
INNER JOIN dbo.KJE_KJEDE RK2 on RK2.Kjedenummer = FT.RKjede2
INNER JOIN dbo.KJE_KJEDEREG REG ON FT.LoepeNr = REG.Lopenummer
0
 
team2005Author Commented:
Working yust great.
Thank you
0
 
team2005Author Commented:
Hi!

Sorry, Navn3 is still = Navn1

CREATE VIEW KJE_EXPORT_PREVIEW AS
SELECT
    dbo.KJE_FLINKTOTAL.MKjede1,
    dbo.KJE_KJEDE.Kjedenavn 'Navn1',
    dbo.KJE_KJEDE.Kjedenummer,
    dbo.KJE_FLINKTOTAL.RKjede1,
    KK2.Kjedenavn 'Navn2',
    dbo.KJE_KJEDEREG.Lopenummer,
    dbo.KJE_FLINKTOTAL.LoepeNr,
    dbo.KJE_KJEDEREG.Besoksadresse,
    dbo.KJE_KJEDEREG.postnrbesok,
    dbo.KJE_KJEDEREG.Postadresse,
    dbo.KJE_KJEDEREG.Postnrpost,
    dbo.KJE_FLINKTOTAL.RKjede2,
    dbo.KJE_KJEDE.Kjedenavn 'Navn3'
FROM dbo.KJE_FLINKTOTAL
INNER JOIN dbo.KJE_KJEDE 
ON (dbo.KJE_FLINKTOTAL.MKjede1 = dbo.KJE_KJEDE.Kjedenummer)
AND (dbo.KJE_FLINKTOTAL.RKjede1 = dbo.KJE_KJEDE.Kjedenummer)
INNER JOIN dbo.KJE_KJEDEREG ON (dbo.KJE_FLINKTOTAL.LoepeNr = dbo.KJE_KJEDEREG.Lopenummer) 
INNER JOIN dbo.KJE_KJEDE KK2
ON (dbo.KJE_FLINKTOTAL.RKjede2 = KK2.Kjedenummer) 

Open in new window

0
 
ValentinoVBI ConsultantCommented:
Please try the updated query which I posted in comment 37786720.
0
 
team2005Author Commented:
Hi!

That one works fine :)
I must split the points here, but how ?
0
 
jogosCommented:
Use the table alias you use for the join also and always in your select, like in the example of ValentinoV

dbo.KJE_KJEDE.Kjedenavn 'Navn3'
must be
kk2.Kjedenavn

PS: the accepted sollution was just a little modification on other script .... that started from first post 'If you want different joins for both conditions then you must join the same table twice' + example
0
 
ValentinoVBI ConsultantCommented:
team2005: cool!  You probably should use the Request Attention button to revise your closure.
0

Featured Post

Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

  • 5
  • 5
  • 3
  • +1
Tackle projects and never again get stuck behind a technical roadblock.
Join Now