2008-10-14 45 views
92

Tengo 2 tablas. Uno (dominios) tiene identificadores de dominio y nombres de dominio (dom_id, dom_url).¿Cómo se une en la misma tabla, dos veces, en mysql?

el otro contiene datos reales, 2 de las cuales requieren nombres de dominio TO y FROM. Así que tengo 2 columnas rev_dom_from y rev_dom_for, que almacenan el ID del nombre de dominio, de la tabla de dominios.

Simple.

Ahora necesito mostrar realmente ambos nombres de dominio en la página web. Sé cómo mostrar uno u otro, a través de los dominios LEFT JOIN ON ON reviews.rev_dom_for = domains.dom_url query, y luego resuenas el dom_url, que hace eco del nombre de dominio en la columna rev_dom_for.

Pero, ¿cómo podría hacer que salga el segundo nombre de dominio, en la columna dom_rev_from?

Respuesta

139

tendrá que utilizar otra combinación, algo a lo largo de estas líneas:

SELECT toD.dom_url AS ToURL, 
    fromD.dom_url AS FromUrl, 
    rvw.* 

FROM reviews AS rvw 

LEFT JOIN domain AS toD 
    ON toD.Dom_ID = rvw.rev_dom_for 

LEFT JOIN domain AS fromD 
    ON fromD.Dom_ID = rvw.rev_dom_from 

EDITAR:

Todo lo que hacemos tiene que unirse en la mesa varias veces. Mire la consulta en la publicación: selecciona los valores de las tablas de Revisiones (con alias como rvw), esa tabla le proporciona 2 referencias a la tabla de Dominio (un FOR y un FROM).

En este punto, es una cuestión simple para unir la tabla de dominio a la tabla de comentarios. Una vez (alias como toD) para el FOR, y una segunda vez (alias como fromD) para el FROM.

Luego, en la lista SELECCIONAR, seleccionará los campos DOM_URL de ambas JUNTAS IZQUIERDAS de la tabla DOMINIO, haciendo referencia a ellas por el alias de cada tabla unida en referencia a la tabla Dominios, y las alias como ToURL y FromUrl.

Para obtener más información sobre aliasing en SQL, lea here.

+5

el truco es que usted ha identificado cada unión con un nombre 'AS' y 'a partir' de modo que se puede utilizar ellos en el SELECCIONADO. – MattSmith

+1

usando una palabra clave no para un nombre de tabla se aclararía. Además, use la palabra clave "como" cuando aliasing. – TheSoftwareJedi

+0

Perdóname, pero todavía no entiendo cómo se supone que funciona. Las 2 tablas son: dominios (dom_id, dom_url) y revisiones (rev_id, rev_dom_from, rev_dom_for). Si alguien pudiera escribir la consulta exacta para poder entenderlo, sería genial, porque no tengo idea de lo que tengo que editar. –

7

Dadas las siguientes tablas ..

Domain Table 
dom_id | dom_url 

Review Table 
rev_id | rev_dom_from | rev_dom_for 

probar este sql ... (Es más o menos lo mismo que Stephen Wrighton escribió más arriba) El truco es que usted está seleccionando básicamente de la tabla de dominio dos veces en la misma consulta y unir los resultados.

Select d1.dom_url, d2.dom_id from 
review r, domain d1, domain d2 
where d1.dom_id = r.rev_dom_from 
and d2.dom_id = r.rev_dom_for 

Si todavía está atascado, sea más específico con exactamente lo que no entiende.

-1

Lea esto y tratar, esto le ayudará a:

Tabla 1

column11,column12,column13,column14 

Tabla 2

column21,column22,column23,column24 


SELECT table1.column11,table1.column12,table2asnew1.column21,table2asnew2.column21 
FROM table1 INNER JOIN table2 AS table2asnew1 ON table1.column11=table2asnew1.column21 INNER TABLE table2 as table2asnew2 ON table1.column12=table2asnew2.column22 

table2asnew1 es una instancia de la tabla 2 que se corresponde con table1.column11=table2asnew1.column21

y

table2asnew2 es otro ejemplo de la tabla 2, que se corresponde con table1.column12=table2asnew2.column22

Cuestiones relacionadas