2011-08-02 14 views
7
SELECT people.first_name AS "First Name", people.last_name AS "Last Name", countries.name AS "Country1", territories.name AS "Territory1", cities.name AS "City1", countries.name AS "Country2", territories.name AS "Territory2", cities.name AS "City2" 
FROM adb_people AS people 
JOIN root_cities AS cities ON people.city1 = cities.id 
AND people.city2 = cities.id 
JOIN root_territories AS territories ON people.prov_state1 = territories.id 
AND people.prov_state2 = territories.id 
JOIN root_countries AS countries ON people.country1 = countries.id 

Lo que estoy tratando de hacer aquí es vincular Country1 (id) a Country1 (name) y mostrar solo el nombre. Este ejemplo de código solo funciona si Country1, Territory1, City1 son lo mismo que Country2, Territory2, City2MySQL JOIN ¿Múltiples uniones en la misma mesa?

Me imagino que mi problema es cómo estoy haciendo mi JOIN. Soy nuevo en el lado SQL de las cosas. He leído en JOINS en Internet (búsqueda de Google y he leído los primeros tutoriales), pero nada de lo que he leído ha sido de ayuda en este caso.

Realmente agradecería cualquier ayuda con lo que estoy haciendo mal aquí. ¿Tal vez un empujón en la dirección correcta?

Respuesta

14

necesita 2 uniones separadas para cada país/ciudad/territorio. a continuación se muestra la sintaxis básica, puede que tenga que cambiar ligeramente ya que no he puesto a través de un programa de análisis:

SELECT people.first_name AS "First Name", people.last_name AS "Last Name", 
countries1.name AS "Country1", territories1.name AS "Territory1", cities1.name AS "City1", 
countries2.name AS "Country2", territories2.name AS "Territory2", cities2.name AS "City2" 
FROM adb_people AS people 
JOIN root_cities AS cities1 ON people.city1 = cities1.id 
    AND people.city2 = cities1.id 
JOIN root_territories AS territories1 ON people.prov_state1 = territories1.id 
    AND people.prov_state2 = territories1.id 
JOIN root_countries AS countries1 ON people.country1 = countries1.id 
JOIN root_cities AS cities2 ON people.city2 = cities2.id 
    AND people.city2 = cities2.id 
JOIN root_territories AS territories2 ON people.prov_state2 = territories2.id 
    AND people.prov_state2 = territories2.id 
JOIN root_countries AS countries2 ON people.country2 = countries2.id 
+0

Duh, ¿Por qué no lo intenté para empezar? Lo implementaré ahora y te haré saber cómo funciona. ¡Gracias! – rlemon

+0

¿Todavía no tiene esta respuesta el problema de que solo funciona si city1 = city2? –

+0

No debería, no. Acabo de editar la consulta porque olvidé cambiar los alias de mi tabla en la parte de selección de copiar/pegar, si eso es lo que te refieres? –

4
SELECT 
    people.first_name AS "First Name", 
    people.last_name AS "Last Name", 
    countries.name AS "Country1", 
    territories.name AS "Territory1", 
    cities.name AS "City1", 
    countries2.name AS "Country2", 
    territories2.name AS "Territory2", 
    cities2.name AS "City2" 
FROM 
    adb_people AS people 
    JOIN root_cities AS cities ON people.city1 = cities.id 
    jOIN root_cities AS cities2 people.city2 = cities2.id 
    JOIN root_territories AS territories ON people.prov_state1 = territories.id 
    JOIN root_territories AS territories2 ON people.prov_state2 = territories2.id 
    JOIN root_countries AS countries ON people.country1 = countries.id 
    JOIN root_countries AS countries2 ON people.country2 = countries2.id 
6

Esto va a hacer el truco.

SELECT people.first_name AS "First Name", people.last_name AS "Last Name", countries.name AS "Country1", territories.name AS "Territory1", cities.name AS "City1", countries2.name AS "Country2", territories2.name AS "Territory2", cities2.name AS "City2" 
FROM adb_people AS people 
JOIN root_cities AS cities ON people.city1 = cities.id 
JOIN root_cities AS cities2 ON people.city2 = cities.id 
JOIN root_territories AS territories ON people.prov_state1 = territories.id 
JOIN root_territories AS territories2 ON people.prov_state2 = territories.id 
JOIN root_countries AS countries ON people.country1 = countries.id 
JOIN root_countries AS countries2 ON people.country2 = countries.id