2013-02-20 3 views
1

죄송합니다. DISTINCT 또는 UNIQUE를 포함하지 않는 다른 방법을 생각할 수 없어서 어디서나 예제를 찾을 수 없습니다. SQL에서 오해의 소지가있는 용어 임).MySQL 필드가 고유하거나 null 인 경우 선택

하나의 테이블에서 고유 값과 null 값을 선택해야합니다.

FLAVOURS: 
id | name | flavour 
-------------------------- 
1 | mark | chocolate 
2 | cindy | chocolate 
3 | rick | 
4 | dave | 
5 | jenn | vanilla 
6 | sammy | strawberry 
7 | cindy | chocolate 
8 | rick | 
9 | dave | 
10 | jenn | caramel 
11 | sammy | strawberry 

독특한 풍미 (바닐라, 캐러멜)를 가진 아이들과 맛이없는 아이들을 원합니다.

중복 된 맛을 가진 아이들 (초콜렛, 딸기)을 원하지 않습니다.

내 도움을 요청하면 초콜릿과 딸기에 대한 GROUP BY, UNIQUE 및 DISTINCT 방법에 대한 답변이 항상 반환됩니다. 그건 내가 원하는 것이 아니야. 나는 필드에서 반복되는 용어를 원하지 않습니다 - 나는 다른 모든 것을 원합니다.

올바른 MySQL 선택 문구는 무엇입니까?

감사합니다.

답변

1

당신은 하나의 맛이있는 곳이므로 그룹을 선택, 단지 일부 그룹을 선택 HAVING 사용할 수 있습니다, 당신은 사용

SELECT * from my_table GROUP BY flavour HAVING COUNT(*) = 1 

당신이 다음 NULL 항목이 해당 사용자를 선택합니다

SELECT * FROM my_table WHERE flavour IS NULL 

두 가지를 결합하면 고유 한 맛 또는 NULL을 갖는 모든 항목을 얻을 수 있습니다.

SELECT * from my_table GROUP BY flavour HAVING COUNT(*) = 1 AND flavour IS NOT NULL 
UNION 
SELECT * FROM my_table WHERE flavour IS NULL 

는 나는 그냥 중복을 생성하는 것 하나 하나가, 만약 NULL 인 맛이 포착되지 않도록 "맛이 null이"추가.

+0

고맙습니다! UNION과 HAVING을 사용하면 완벽하게 작동합니다. 건배. – BenR

0

나는 사용할 데이터베이스가 없지만의 행을 따라 쿼리를 사용할 수 있어야합니다.

맛은 IN (향기를 선택할 수 (향료) = 1 향미 GROUP FLAVORS부터) 향료 (COUNT) OR 풍미가 null FLAVORS에서

SELECT 이름;

이것이 옳지 않다면 사과 드리지만 희망적으로 시작하는 것이 좋습니다.

0

중복을 찾는 셀프 조인이 필요합니다. 그런 다음 일치가없는 경우 (즉, t2.flavor가 NULL 인 경우)를 찾아 해당 중복을 거부해야합니다. 그런 다음

SELECT DISTINCT t1.name, t1.flavor 
FROM tablename t1 
LEFT JOIN tablename t2 
ON t2.flavor = t1.flavor AND t2.ID <> t1.ID 
WHERE t2.flavor IS NULL 
OR t1.flavor IS NULL 

난이 도움이되기를 바랍니다 END_LINK하면 관심은 WHERE 절에서 두 번째 라인으로, 원래의 테이블에서 널 찾고 완전히 다른 무언가를하고 (OR t1.flavor은 NULL입니다).