2009-07-16 2 views
2
| one | two | 
------------- 
| A | 1 | 
| A | 2 | 
| B | 1 | 
| B | 3 | 
| C | 1 | 
| C | 4 | 

내가 쿼리의 모든 열에 더 반복을 얻을 싶습니다, 그래서 모든 행에 별개 찾기 때문 표준 SELECT DISTINCT one,two FROM table; 또는 SELECT * FROM table GROUP BY one,two;이 잘 작동을하지 않습니다하는 이 경우 6 개의 행이 모두 반환됩니다.멀티 열

이상적으로, 내가 찾고 있어요 : PHP (등)에서

| one | two | 
------------- 
| A | 1 | 
| B | 3 | 
| C | 4 | 

, 나는 각 열의 배열이 작업을 수행하고, 모든 열은 이전에 사용 된 경우 다음 행을 건너 뛰고 바로 것입니다. MySQL에서 구현하는 방법을 잘 모르겠습니다.

SELECT * FROM (SELECT * FROM table GROUP BY one) GROUP BY two - 거의 작동합니다. 하지만 외부 쿼리가 모든 대안을 볼 수 없기 때문에 유효한 옵션이 누락됩니다. 즉, 내부가 A, B, C로 축소되지만 모두 1 초를 선택할 수 있습니다. 이는 두 번째 GROUP BY를 의미합니다. 그런 다음 1 행에 자신을 접어 라!

중복 검사 순서가 반환 된 정확한 행에 영향을 미칠 것이라는 점을 알고 있습니다. 걱정할 필요가 없습니다. 최소한 유사한 행을 가진 행의 좋은 단면을 원합니다.

+1

이 쿼리 규칙을 설명한다. 동일한 'one'필드를 가진 2 개의 행이 있다면, 어느 것이 출력에 포함되기를 원합니까? –

+0

예제에서 첫 번째로 일치하는 'A - 1'을 선택했지만 다른 두 번째에서는 두 번째 일치 항목을 선택했습니다. 하나 또는 다른 선택을 확고히 할 수 있습니까? –

+0

Clement의 질문 외에도 - 열 1의 'C'가 'A'와 'B'로 이미 발생한 열 2의 값으로 만 발생하면 어떻게됩니까? – quosoo

답변

0

SQL에서이 작업을 수행 할 방법이 없습니다. 여섯 개의 행 (모든 고유 튜플), 다섯 개의 행 (각 열 값의 첫 번째 사용마다) 또는 한 개의 행 (각 열의 각 값에서 첫 사용마다 나타납니다 두 컬럼 모두).

당신이 원하는 것을 설명하는 데 어려움을 겪고있는 이유는 그것이 인간의 판단을 기반으로한다는 것입니다. 질적으로 영어로 설명 할 수있을 때까지는 SQL로이를 수행 할 수 없으며, 원하는 것은 정 성적이 아니며 절차 적입니다.

작은 열로 그룹화 한 다음 매치 카운트 역순으로 정렬하는 등 여러 가지 방법으로 접근 할 수 있지만 모두 악용 될 수 있습니다.

선택을위한 명확한 논리 기반 기준을 지정할 때까지는 성공하지 못합니다. "minimal"을 정의하는 것은 minimal을 정의 할 때까지 계산되지 않으며, 원하는 최소한의 값은 MySQL에서 얻을 수없는 절차 적 집계를 필요로합니다. 그것이 내가 대답을 발견 밝혀 아니라

+0

아마도 부정확하게 행을 제외시키지 않을 것입니다. select * from (select * from foo group by) l 유니온 all (select * from foo group by two) r; –

+0

답장을 보내 주셔서 감사합니다, 질투와 절차의 차이를 이해하지 못한다는 것을 인정하십시오 - 해당 조건을 읽으려고 시도합니다 ... – barryhunter

1

, 그것은 단순히 중복 행을 삭제로)

CREATE TEMPORARY TABLE table2 ENGINE HEAP SELECT * FROM table;

ALTER IGNORE TABLE table2 ADD UNIQUE (one), ADD UNIQUE (two);

SELECT * FROM table2;

이 표 변경에 무시 중요하다 고유 인덱스 인 ,을 기반으로합니다.

(전에 생각하지 않았는지 확실하지! - 스타일의 쿼리 "에 의해 그룹 전에 순서를"해결에 좋은 효과를 사용)

+0

또는 실제 검색어에있는 과정은 초기 선택에서 WHERE 및 ORDER BY를 사용합니다. 유능한. 서로 다른 순서로 실험 해 보니 RAND()가 잘 작동합니다. – barryhunter

관련 문제