webForumDet fria alternativet

ionner join - två från samma

8 svar · 173 visningar · startad av Eclipse

EclipseMedlem sedan juli 20003 825 inlägg
#1

Alltså, något komplicerat problem.

Jag har [users] med olika fält, [x_admin] [x_member] där jag sett till att bara det ENA kan vara TRUE. Man kan antingen vara admin ELLER member, inte båda samtidigt. Okej?

Nu är det så att i en viss frågeställning (som jag verkligen orkar förklara här, ni orkar inte heller lyssna, trust me) så skulle jag villja hämta namnen på både en admin och en member i en och samma fråga.

Jag BEHÖVER inte göra detta men det skulle vara snyggt. Are you with?

Ett förenklat men relebvant exempel:

[news]
x_ID
x_adminID
x_memberID
x_text

SELECT * FROM (([news]
INNER JOIN [users] ... )
INNER JOIN [users] ... )

Så där går säkert inte att göra (och det är inte excakt så jag vill göra) men ser ni själva kärnan i problematiken?

LarsGMedlem sedan dec. 200012 464 inlägg
#2
select m.x_name,a.x_name
  from users m,users a, news
 where m.x_id = news.x_memberID
   and news.x_adminID = a.x_id

------------------
essentitia preter non sans multiplicandum

EclipseMedlem sedan juli 20003 825 inlägg
#3

Wow! Läckert! Så man kan göra så! Det förändrar ju hela världsbilden... :-)

Ska kolla närmare på det i morgon.

För övrigt noterar jag att jag stavar så illa att hälften hade räckt! :-)

EclipseMedlem sedan juli 20003 825 inlägg
#4
SELECT member.x_firstname, customer.x_firstname FROM users member, users customer, confirmOrder WHERE
 confirmOrder.x_userID = member.x_ID AND confirmOrder.x_customerID = customer.x_ID;

Detta fick jag inte att fungera. Ser ni något uppenbart fel?

LarsGMedlem sedan dec. 200012 464 inlägg
#5

Nej, det är inget syntaktiskt fel i den.

Vad händer?

Felmeddelande?

Inga träffar?

------------------
essentitia preter non sans multiplicandum

EclipseMedlem sedan juli 20003 825 inlägg
#6

confirmOrder.x_userID finns inte...

SELECT member.x_firstname, member.x_lastname, member.x_company,
 customer.x_firstname, customer.x_lastname, customer.x_company
 FROM users member, users customer, confirmOrder, job WHERE
 confirmOrder.x_jobID = job.x_ID AND
 job.x_userID = member.x_ID AND
 confirmOrder.x_customerID = customer.x_ID;

0,0> Måns 1,0> Olai 2,0> Checkpoint 3,0> Palle 4,0> Pall 5,0> Trycknissarna

0,1> Rudolf 1,1> mule 2,1> Massa Tryck AB 3,1> Palle 4,1> Pall 5,1> Trycknissarna

Cool feature! Tack för hjälpen!

EclipseMedlem sedan juli 20003 825 inlägg
#7
SELECT TOP 30 job.x_ID, job.x_name, job.x_type, 
member.x_firstname, member.x_lastname, member.x_company,
customer.x_firstname, customer.x_lastname, customer.x_company, 
confirmOrder.x_ID, confirmOrder.x_date, confirmOrder.x_checked, confirmOrder.x_checkDate,
jobSettings.x_price1, jobSettings.x_price2, jobToMember.x_price1, jobToMember.x_price2 
FROM users member, users customer, confirmOrder, job, jobSettings, jobToMember WHERE

confirmOrder.x_jobID = job.x_ID AND 
job.x_userID = member.x_ID AND
confirmOrder.x_customerID = customer.x_ID AND
jobSettings.x_jobID = job.x_ID AND 
jobSettings.x_customerID = confirmOrder.x_customerID AND 
jobToMember.x_jobID = job.x_ID
ORDER BY confirmOrder.x_date;

Jag vet inte om du får ont i huvudet av att titta på ovanstående kod...

Min fråga är, kan man använda INNER JOIN alt. LEFT JOIN eller fungerar inte det med detta manéer?

LarsGMedlem sedan dec. 200012 464 inlägg
#8

Om du vill ha en outer join någonstans så får du använda syntaxen med

a left outer join b on a.id = b.id

Egentligen skall det gå att blanda, t.ex.

select * from a,b left outer join c on b.id = c.id where a.id = b.id

men några dbms verkar ha svårt för det så då får man skriva så här.

select * from (a inner join b on a.id = b.id) left outer join c on b.id = c.id where a.id = b.id

Det beror alltså på, men att skriva allt i from är det som är mest portabelt.

------------------
essentitia preter non sans multiplicandum

EclipseMedlem sedan juli 20003 825 inlägg
#9

Det beror alltså på, men att skriva allt i from är det som är mest portabelt.

Tack för det! Det känns tryggt! Jag känner att det du skriver känns aningen oöverskådligt och då har du endå valt att utelämna den egentlige koden...

En smaksak kanske, men jag är inte så mycket för det där med enskilda bokstäver. Det tenderar att bli något intetsägande... Ungefär som en burgare utan krydda. Visst, det slinker ner om man nu vill Det är bara att blunda och gapa... men 'hello world'...

Jag förstår att din kod är att betrakta som exempel, ett smakprov på den äkta varan liksom. Precis som burgaren! :-)

Fan vilken poet jag är! Men SQL är lite som poetri, det finns några duktiga som regerar men de flesta sitter på sin kammare och skriver för katten.

127 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
123 ms — hämta tråd, inlägg och bilagor (db)