2011-04-10 18 views
21

Jak mogę użyć klauzuli DISTINCT z WHERE? Na przykład:Klauzula DISTINCT z WHERE

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

Chcę wybrać wszystkie kolumny z tabeli z różnymi adresami e-mail.

+1

To sprzeczność w terminach. Masz na myśli "WYBIERANIE wszystkich kolumn, których adres e-mail jest niepowtarzalny"? –

+0

@adam: - tak !! – Mohit

+0

OK, odpowiedział na twoje pytanie. –

Odpowiedz

3

Może przez:

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

@Mohit: co chcesz powiedzieć? rozbuduj proszę? –

+1

Chcę wybrać wszystkie wiersze mające unikalny adres e-mail i posiadające id = '2'; – Mohit

+0

e-mail i identyfikator to dwie kolumny w mojej tabeli – Mohit

21

Jeśli masz na myśli wszystkich kolumn, których e-mail jest wyjątkowy:

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

czy to źle, jeśli napiszę "WYBIERZ * Z tabeli, gdzie e-mail w (wybierz odrębny e-mail z tabeli)"? – Ravi

+0

@jWeaver ... Nawet ja początkowo myślałem o tym, co myślisz. Ale próbowałem wykonać zapytanie. To jest złe. – Vikram

+0

Jak dokładnie działa pod-zapytanie? – 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

Można używać ROW_NUMBER(). Możesz także określić warunki, w których się znajdujesz. (Np Name LIKE'MyName% w następującej kwerendzie)

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

Jedna prosta kwerenda będzie zrobić:

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

Op nie określił smaku SQL, ale to polecenie nie uruchomi się w SQL Serverze i spowoduje niejednoznaczne wyniki w MySQL. –

0

nie ta praca:

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

Nie jestem świadomy wielu DBMS, które zaimplementowały predykat UNIQUE. Którego używasz? Ponadto, myślę, że masz pytania do tyłu: nie należy "SELECT email" być zapakowane w predykat "UNIQUE()"? I myślę, że potrzebujesz jakiejś klauzuli join ('FROM table1 t2 WHERE t2.email = t1.email'). – JDB

-1

Zapytanie:

Select *, (Select distinct email) from Table1 
1

Możesz użyć HAVING zdanie.

SELECT * 
FROM tab_name 
GROUP BY email_id 
HAVING COUNT(*) = 1; 
Powiązane problemy