2009-04-16 2 views
0

사용자 이름 필드와 함께 약 100 레코드가있을 수있는 테이블이 있습니다. 동일한 사용자 이름을 가진 많은 레코드가있을 수 있습니다. 각 사용자 이름에 대해 하나의 레코드 만 반환되도록하려면 어떻게해야합니까?sql 고유 레코드에 대한 제한

다음 표 만 다음은 반환되는

users 

username item firstname lastname 
------------------------------------------------- 
superhans shoes super  hans 
jez   hat  jeremy  sisto 
jez   book jeremy  sisto 
flinto  train fred  flintstone 
superhans shirt super  hans 

을 위해 :

username item firstname lastname 
------------------------------------------------- 
superhans shoes super  hans 
jez   hat  jeremy  sisto 
flinto  train fred  flintstone 

답변

0
SELECT DISTINCT username, item, firstname FROM users 
+0

실제로 작동하지 않습니다. – SquareCog

1

는 우선, 테이블은 구성이 상태가 발생하지 않도록 유지되어야한다. 이제까지.

둘째, 원하는 것은 SELECT DISTINCT입니다. 당신 이 결과에서 항목 필드를 반환하지 않은 경우 당신은 DISTINCT 사용할 수

+0

왜? 아마도 그의 응용 프로그램에서 "사용자 이름"이 중복 될 수 있다는 것은 완전히 합법적입니다. –

+0

그럴 경우 왜 그는 고유 목록을 반환하고 임의의 레코드를 삭제하려고합니까? –

+0

데이터베이스가 정규화 된 것처럼 보이지 않습니다. 사용자 이름은 분명히 고유해야합니다 (각 행의 성/이름이 동일해야 함). – Calvin

4

:

이 FIRSTNAME, DISTINCT 사용자 이름을 선택 사용자

해당 항목 필드를 포함 할 경우 FROM, LASTNAME,

SELECT t.username, 
    (SELECT TOP 1 item FROM users WHERE username = t.username) AS item, 
    t.firstname, 
    t.lastname 
FROM (
    SELECT DISTINCT username, item, firstname, lastname 
    FROM users 
) AS t 

이와 같은 쿼리를 사용하는 것은 의미가 없습니다. 당신이 달성하고자하는 것에 대해 좀 더 구체적으로 설명해 주시겠습니까?

0

users라는 테이블에 사용자 이름을 저장하고 user_id라는 고유 ID 필드를 사용하는 것이 가장 좋습니다.

그런 다음 등 사용자 ... 예를 들어, 구매, 사용자 정보

0

사용자 이름 기본 키 확인에 관련된 테이블의 데이터를 저장하는 foriegn 키로 USER_ID 사용 -, 당신은 보장 할 수있는 방법을 고유성

3

SELECT * 
FROM users 
GROUP BY username 

그리고 각 사용자

다시 임의의 행을 얻을 것이다 : (당신이 언급하지 않았다, 그러나 당신이이 질문에 MySQL을 태그했습니다, 그래서 가정합니다) 당신이 할 수있는 MySQL의 5에

Mysql Refman 11.11.3를 참조하십시오

MySQL은 그래서 당신은 GROUP BY 절에 나타나지 않는 SELECT 목록에 집계되지 않은 열 또는 계산을 사용할 수 BY GROUP의 사용을 확장합니다. [...] GROUP BY 부분에서 생략 한 열이 그룹에서 일정하지 않은 경우이 기능을 사용하지 마십시오. 서버는 그룹에서 임의의 값을 반환 할 수 있으므로 모든 값이 동일하지 않으면 결과가 불확실합니다.

사실, 그것에 대해 생각, 당신은 당신에게 모든 그 항목의 목록을 줄 것이다

SELECT username, GROUP_CONCAT(DISTINCT item), whatever 
FROM users 
GROUP BY username 

작업을 수행 할 수 있습니다. 처음부터 그 임의의 행을 왜 원했는지에 달려 있습니다.

----- N

+0

그건 아주 멋지다. –

+0

나는 네가 맞다고 의심하고,이 행동은 실제로 그들이하고 싶은 일이 아닐 수도있다. – NickZoic

관련 문제