2011-09-12 49 views

Respuesta

7

Esta consulta crea una tabla que contiene todos los posibles pares de identificadores de contacto.

Por ejemplo, si sus identificadores de contacto fueron de 1, 2 y 3 que se obtendría como resultado

1 1 
1 2 
1 3 
2 1 
2 2 
2 3 
3 1 
3 2 
3 3 
2

Es una respuesta simple: utilice su consulta enumerada en el ejemplo. debería funcionar bien. Aunque esto es probablemente una mala idea, si desea utilizar la misma mesa dos veces, tenga en cuenta que usted tiene que unirse "a esos" cuadros, ya que eran diferentes:

SELECT c1.id as sender, c2.id as replier 
FROM contacts c1, contacts c2 
WHERE sender.id = replier.id 
+1

No tiene tablas 'sender' o' replier' para la cláusula WHERE para trabajar. No está del todo claro qué quiere decir con "tenga en cuenta que tiene que unirse" a esas "tablas porque eran diferentes" cuando las dos tablas son la misma tabla. –

14

puede utilizar una única mesa dos veces en una consulta dándole dos nombres, así.

Los alias a menudo se introducen con la palabra clave AS. También normalmente especifica una condición de unión (porque sin ella, obtiene el Cartesian Product de la tabla unida a sí misma). Para preferencia, usa la notación JOIN explícita.

SELECT c1.id AS sender, c2.id AS replier 
    FROM contacts AS c1 
    JOIN contacts AS c2 ON c1.xxx = c2.yyy; 

No está claro qué columnas podrían usarse para la unión en este ejemplo; no tenemos ninguna información para ayudar a resolver eso.

Normalmente, no sería otra mesa para que actúe como intermediario, como una tabla de mensajes:

SELECT c1.id AS sender, c1.email AS sender_email, 
     c2.id AS replier, c2.email AS replier_email, 
     m.date_time 
    FROM messages AS m 
    JOIN contacts AS c1 ON m.sender_id = c1.id 
    JOIN contacts AS c2 ON m.replier_id = c2.id; 
1

Sí, puede utilizar la misma mesa dos veces, dando diferentes alias para la tabla. Creo que estudiar sobre auto uniones te ayudará a entender.

1

Sí, puede usar la misma tabla más de una vez en la misma consulta SELECT.

Tenga en cuenta que solo necesita utilizar nombres de correlación de tablas (coloquialmente 'alias') cuando la tabla aparece más de una vez dentro del mismo ámbito. Por ejemplo, el SELECT consulta siguiente utiliza la misma tabla de dos veces, pero, porque cada uno es dentro de un ámbito distinto (cada uno separado por la palabra clave UNION), no se requiere nombre de correlación tabla:

SELECT id, 'Sender' AS contact_narrative 
    FROM contacts 
WHERE something = 1 
UNION 
SELECT id, 'Replier' AS contact_narrative 
    FROM contacts 
WHERE something = 2; 
Cuestiones relacionadas