2011-04-10 18 views
21

Come posso utilizzare la clausola DISTINCT con WHERE? Per esempio:DISTINCT clausola con WHERE

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

voglio selezionare tutte le colonne da una tabella con gli indirizzi email distinti.

+1

Questa è una contraddizione in termini. Intendi "SELEZIONARE tutte le colonne la cui e-mail è unica"? –

+0

@adam: - si !! – Mohit

+0

OK, ha risposto alla tua domanda. –

risposta

3

Può essere da:

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

@Mohit: cosa vuoi dire? elaborato per favore? –

+1

voglio selezionare tutte le righe con email unica e con id = '2'; – Mohit

+0

email e id sono due colonne nella mia tabella – Mohit

21

Se vuoi dire tutte le colonne la cui e-mail è unico nel suo genere:

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

è sbagliato se scrivo la tabella 'SELECT * FROM in cui si trova l'e-mail (selezionare e-mail distinte dalla tabella)'? – Ravi

+0

@jWeaver ... Anche io stavo pensando inizialmente a cosa stavi pensando. Ma, ha provato a eseguire la query. È sbagliato. – Vikram

+0

Quindi, come funziona esattamente la sotto-query? – 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

È possibile utilizzare ROW_NUMBER(). È possibile specificare anche le condizioni. (Ad esempio Name LIKE'MyName% nella query seguente)

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 semplice query lo farà:

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

L'operazione non ha specificato il sapore di SQL, ma questo comando non verrà eseguito in SQL Server e produce risultati ambigui in MySQL. –

0

Non sarebbe questo lavoro:

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

Non sono a conoscenza di molti DBMS che hanno implementato il predicato UNIQUE. Quale stai usando? Inoltre, penso che le query siano state fatte all'indietro: non dovremmo usare 'SELECT email' nel predicato' UNIQUE() '? E penso che tu abbia bisogno di una sorta di clausola join ('FROM table1 t2 WHERE t2.email = t1.email'). – JDB

-1

Query:

Select *, (Select distinct email) from Table1 
1

È possibile utilizzare HAVING clausola.

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