2011-04-10 33 views
21

¿Cómo puedo usar la cláusula DISTINCT con WHERE? Por ejemplo:cláusula DISTINCT con WHERE

SELECT * FROM table WHERE DISTINCT email; -- email is a column name 

Quiero seleccionar todas las columnas de una tabla con distintas direcciones de correo electrónico.

+1

Eso es una contradicción en los términos. ¿Quiere decir "SELECCIONAR todas las columnas cuyo correo electrónico es único"? –

+0

@adam: ¡sí! – Mohit

+0

OK, respondió su pregunta. –

Respuesta

3

puede ser por:

SELECT DISTINCT email,id FROM table where id='2'; 
+0

@Mohit: ¿qué quieres decir? elabora por favor? –

+1

Quiero seleccionar todas las filas que tienen correo electrónico único y que tienen id = '2'; – Mohit

+0

email y id son dos columnas en mi tabla – Mohit

21

Si se refiere a todas las columnas cuyo correo electrónico es único:

SELECT * FROM table WHERE email in 
    (SELECT email FROM table GROUP BY email HAVING COUNT(email)=1); 
+0

¿Es incorrecto si escribo 'SELECT * FROM tabla donde correo electrónico entra (seleccione correo electrónico distinto de la tabla)'? – Ravi

+0

@jWeaver ... Incluso yo estaba pensando inicialmente lo que estabas pensando. Pero, intenté ejecutar la consulta. Está mal. – Vikram

+0

Entonces, ¿cómo funciona exactamente la sub consulta? – Delfino

3
select t1.* 
from YourTable as t1 
    inner join 
    (select email 
    from YourTable 
    group by email 
    having count(email) = 1) as t2 
    on t1.email = t2.email 
0

Usted puede utilizar ROW_NUMBER(). También puede especificar dónde están las condiciones. (Por ejemplo Name LIKE'MyName% en la siguiente consulta)

SELECT * 
FROM (SELECT ID, Name, Email, 
      ROW_NUMBER() OVER (PARTITION BY Email ORDER BY ID) AS RowNumber 
    FROM MyTable 
    WHERE Name LIKE 'MyName%') AS a 
WHERE a.RowNumber = 1 
0

Una simple consulta lo hará:

SELECT * 
FROM table 
GROUP BY email 
HAVING COUNT(*) = 1; 
+0

El op no especificó el sabor de SQL, pero este comando no se ejecutará en SQL Server y produce resultados ambiguos en MySQL. –

0

no Que este trabajo:

SELECT email FROM table1 t1 
      where UNIQUE(SELECT * FROM table1 t2); 
+0

No conozco muchos DBMS que hayan implementado el predicado UNIQUE. Cual estas usando? Además, creo que tienes las consultas al revés: ¿no debería 'SELECT email' estar envuelto en el predicado' UNIQUE() '? Y creo que necesitas algún tipo de cláusula de unión ('FROM table1 t2 WHERE t2.email = t1.email'). – JDB

-1

Consulta:

Select *, (Select distinct email) from Table1 
1

Puedes usar el HAVING cláusula.

SELECT * 
FROM tab_name 
GROUP BY email_id 
HAVING COUNT(*) = 1;