webForumDet fria alternativet

Problem med fet JOIN

2 svar · 720 visningar · startad av sabbacus

sabbacusMedlem sedan juli 2002629 inlägg
#1

Tjipp.
Har följande tre tabeller (har tagit bort en massa kolumner i spp_users för enkelhetens skull). Jag vill få ut t.ex. för- och efternamn i spp_users tillsammans med namnet på gatan de bor på samt staden de bor i . Att de ligger i olika tabeller beror på att det är en förteckning över samtliga gatnamn och städer i landet, men låt oss skippa den diskusisonen för tillfället.
Jag vill dessutom att innehållet i spp_users, d.v.s. namnet ska visas även om ingen stad eller gata är angiven, d.v.s. när street_id är noll eller city_id är noll eller null.

Jag har kommit en bit på vägen genom att få ut två SQL-satser som fungerar precis som jag vill att de ska, så att rätt information skrivs ut på det sätt jag vill.

Det jag inte lyckas klura ut är hur jag får allt till en fråga. Gissningsvis ska jag ha två right joins i frågan men jag har gått bet på att formulera frågan.
Mina två SQL-frågor finns bifogade under tabellerna. Hoppas att ni kan hjälpa mig

/M

mysql> describe spp_users;
+--------------------+-------------------+------+-----+---------+----------------+
| Field              | Type              | Null | Key | Default | Extra          |
+--------------------+-------------------+------+-----+---------+----------------+
| id                 | int(10) unsigned  |      | PRI | NULL    | auto_increment |
| active             | enum('y','n')     | YES  |     | y       |          |
| first_name         | varchar(50)       | YES  |     | NULL    |          |
| last_name          | varchar(50)       | YES  |     | NULL    |          |
| street_id          | int(10) unsigned  | YES  | MUL | 0       |          |
| zipcode            | varchar(12)       | YES  |     | NULL    |          |
| street_no          | varchar(12)       | YES  |     | NULL    |          |
| city_id            | int(10) unsigned  | YES  | MUL | 0       |          |
+--------------------+-------------------+------+-----+---------+----------------+
26 rows in set (0.00 sec)

mysql> describe spp_cities;
+-------+------------------+------+-----+---------+----------------+
| Field | Type             | Null | Key | Default | Extra          |
+-------+------------------+------+-----+---------+----------------+
| id    | int(10) unsigned |      | PRI | NULL    | auto_increment |
| name  | varchar(255)     | YES  | MUL | NULL    |                |
+-------+------------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)

mysql> describe spp_streets;
+-------+------------------+------+-----+---------+----------------+
| Field | Type             | Null | Key | Default | Extra          |
+-------+------------------+------+-----+---------+----------------+
| id    | int(10) unsigned |      | PRI | NULL    | auto_increment |
| name  | varchar(255)     | YES  | MUL | NULL    |                |
+-------+------------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)

SQL-frågor:
SELECT distinct (spp_users.id), spp_users.first_name, spp_users.last_name, spp_streets.name AS street_name FROM spp_users, spp_streets RIGHT JOIN spp_users AS boing ON (spp_users.street_id = spp_streets.id) WHERE spp_users.active='y' limit 40;

SELECT distinct (spp_users.id), spp_users.first_name, spp_users.last_name, spp_cities.name AS city_name FROM spp_users, spp_cities RIGHT JOIN spp_users AS boing ON (spp_users.city_id = spp_cities.id) WHERE spp_users.active='y' limit 40;

LarsGMedlem sedan dec. 200012 465 inlägg
#2
select u.first_name, u.last_name, s.name as strita, c.name as city
  from spp_users as u join spp_streets s on u.street_id = s.id
  join spp_cities as c on u.city_id = c.id

Om värdet för city_id och street_id inte är definierat för alla så får du ändra till left join.

sabbacusMedlem sedan juli 2002629 inlägg
#3

När jag ändrade till LEFT JOIN funkade queryn klockrent!
Tackar tackar :)

Genererad på 679 ms · cache AV · v20260730165559-full.f96bc7eb