Vinnaren i pepparkakshustävlingen!
  • 1
  • 2
2012-11-14, 18:59
  #13
Medlem
Citat:
Ursprungligen postat av suffe
2) Fordon utan någon förare kopplad till sig skriv inte ut alls.

Den där löser med LEFT JOIN.

Vad gäller att dela strängen i 2 kolumner verkar det inte gå. Kan du inte göra det någon annanstans i systemet, använder du Java, PHP eller liknande "ovanpå" ?
Citera
2012-11-14, 22:30
  #14
Moderator
Protons avatar
Citat:
Ursprungligen postat av poussard
Den där löser med LEFT JOIN.

Vad gäller att dela strängen i 2 kolumner verkar det inte gå. Kan du inte göra det någon annanstans i systemet, använder du Java, PHP eller liknande "ovanpå" ?
Va? Vaddå dela upp i två kolumner?
Citera
2012-11-15, 10:43
  #15
Medlem
Citat:
Ursprungligen postat av Proton
Va? Vaddå dela upp i två kolumner?

Jag menar att följande SQL-sats åstadkommer vad TS vill om TS i sitt java/php/c#-lager delar strängar med ett kommatecken i, till 2 strängar. Är du med?

SELECT
fordon.id,
regNr,
(SELECT GROUP_CONCAT(namn) FROM förare ff WHERE ff.bil=fordon.id) drivers
FROM fordon
LEFT JOIN förare on fordon.id=förare.bil
Citera
2012-11-15, 11:06
  #16
Medlem
Citat:
Ursprungligen postat av poussard
SELECT
fordon.id,
regNr,
(SELECT GROUP_CONCAT(namn) FROM förare ff WHERE ff.bil=fordon.id) drivers
FROM fordon
LEFT JOIN förare on fordon.id=förare.bil

Poussard: fan va bra. Din SQL-sats returnerar:
0 abc123 Lisa
1 bcd234 Pelle,Eva
1 bcd234 Pelle,Eva
2 cde345 Olle

Det enda problemet nu är att de mellersta två raderna upprepar sig men genom att lägga på DISTINCT på den yttersta SELECT-satsen får man ut:
0 abc123 Lisa
1 bcd234 Pelle,Eva
2 cde345 Olle

Lägger man till ett nytt fordon (efg456) utan någon förare skrivs följande ut:
0 abc123 Lisa
1 bcd234 Pelle,Eva
2 cde345 Olle
3 efg456 NULL

...vilket är precis det jag var ute efter

Tack för hjälpen. Grymt bra!

Edit: klistrar in den fungerande SQL-satsen också:
Kod:
SELECT DISTINCT
fordon.id,
regNr,
(SELECT GROUP_CONCAT(namn) FROM förare ff WHERE ff.bil=fordon.id) drivers
FROM fordon
LEFT JOIN förare on fordon.id=förare.bil 
Citera
2012-11-15, 11:59
  #17
Moderator
Protons avatar
Citat:
Ursprungligen postat av suffe
Poussard: fan va bra. Din SQL-sats returnerar:
0 abc123 Lisa
1 bcd234 Pelle,Eva
1 bcd234 Pelle,Eva
2 cde345 Olle

Det enda problemet nu är att de mellersta två raderna upprepar sig men genom att lägga på DISTINCT på den yttersta SELECT-satsen får man ut:
0 abc123 Lisa
1 bcd234 Pelle,Eva
2 cde345 Olle

Lägger man till ett nytt fordon (efg456) utan någon förare skrivs följande ut:
0 abc123 Lisa
1 bcd234 Pelle,Eva
2 cde345 Olle
3 efg456 NULL

...vilket är precis det jag var ute efter

Tack för hjälpen. Grymt bra!

Edit: klistrar in den fungerande SQL-satsen också:
Kod:
SELECT DISTINCT
fordon.id,
regNr,
(SELECT GROUP_CONCAT(namn) FROM förare ff WHERE ff.bil=fordon.id) drivers
FROM fordon
LEFT JOIN förare on fordon.id=förare.bil 
Bara för nyfikenhetens skull, provade du SQL-en i https://www.flashback.org/sp40352138 med? Funkade den? Kan ju vara kul att veta även om du har fått tag på svaret nu?
Citera
2012-11-15, 12:20
  #18
Medlem
Citat:
Ursprungligen postat av Proton
Bara för nyfikenhetens skull, provade du SQL-en i https://www.flashback.org/sp40352138 med? Funkade den? Kan ju vara kul att veta även om du har fått tag på svaret nu?

Jag testade den precis och den returnerar:
0 abc123 Lisa,Pelle,Eva,Olle
1 bcd234 NULL
2 cde345 NULL

Jäkla klurigt problem
Citera
2012-11-15, 13:05
  #19
Moderator
Protons avatar
Citat:
Ursprungligen postat av suffe
Jag testade den precis och den returnerar:
0 abc123 Lisa,Pelle,Eva,Olle
1 bcd234 NULL
2 cde345 NULL

Jäkla klurigt problem
Ok, du får alltså ut alla förare på den första raden och null i de övriga.

Om man ska debugga den här sqklen måste man ta isär den och ta reda på vad den inre sql-en returnerar egentligen.

Eftersom du nu fått lösningen på problemet behöver vi inte fundera så mycket mer på det, jag ville bara veta om den gjorde nåt vettigt, men tydligen gjorde den inte det
Citera
2012-11-15, 13:20
  #20
Medlem
Citat:
Ursprungligen postat av Proton
Ok, du får alltså ut alla förare på den första raden och null i de övriga.

Om man ska debugga den här sqklen måste man ta isär den och ta reda på vad den inre sql-en returnerar egentligen.

Eftersom du nu fått lösningen på problemet behöver vi inte fundera så mycket mer på det, jag ville bara veta om den gjorde nåt vettigt, men tydligen gjorde den inte det

Jag förstår dig fullt ut. Är likadan själv...vill veta om/hur saker och ting funkar
Citera
2012-11-25, 02:34
  #21
Medlem
Citat:
Ursprungligen postat av suffe
Nu vill jag få ut information om alla fordon samt för varje fordon namen på dess förare, så för Volvon vill jag på en rad få ut:

id, regNr, märke, modell, förarNamn
1, bcd234, Volvo, 740, Pelle;Eva

Hur gör jag detta? Jag vill alltså få ut både Pelles och Evas namn i samma kolumn. Jag har tittat på olika JOIN:s men då får jag en rad för Pelle och en ny rad för Eva.

Du kan även prova

SELECT fordon.id, regNr, märke, modell, GROUP_CONCAT(förarNamn) from fordon, förare where fordon.id = förare.bil group by fordon.id

så slipper du köra flera selects och distinct i yttre delen.
(Med reservation för att jag inte provkört.)
Citera
  • 1
  • 2

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback