2011-09-17 9 views
16

Estoy tratando de escribir una consulta simple en sqlite con una auto unión. Quiero todos los pares de ID de los productos que tienen el mismo costo, pero quiero pares únicos (es decir, no enlistar el mismo par dos veces, incluso en diferente orden). Esto es lo que tengo:Seleccionar pares únicos en la unión automática

SELECT b1.Id, b2.Id 
FROM Basic AS b1 
LEFT JOIN Basic AS b2 
ON b1.cost = b2.cost 
WHERE b1.Id != b2.Id 
AND b1.Cost = 5; 

por lo que obtener algo así como

23 | 101 
23 | 205 
24 | 103 
101 | 23 <-- Duplicate! 

He probado diferentes combinaciones de distintos y GROUP BY, pero todavía conseguir pares dupicate:

I 've intentado cosas como

SELECT DISTINCT bp1.Id, bp2.Id ...

& ... = 5 GROUP BY bp1.Id, bp2.Id;

¿Cómo puedo deshacerme de los pares duplicados? ¿Algunas ideas?

¡Agradeceré su ayuda!

Respuesta

36

Cambio != a < en su cláusula WHERE para asegurar que el ID más bajo siempre es lo primero:

WHERE b1.Id < b2.Id 
+0

Esto no funciona si hay más de 1 juego de identificadores que satisfacen los criterios. –

Cuestiones relacionadas