2010-11-21 5 views
1
와 함께 사용

*와 distinct를 사용하는 데 문제가 있습니다. 저는 테이블에 가입하여 다음과 같은 진술을하려고합니다 :Distinct를 *

SELECT DISTINCT Name, * FROM table_a JOIN table_a.id=table_b.id WHERE status=1 

그러나 나는 그렇게 할 수 없습니다. Distinct with * 옵션을 사용하는 방법이 있습니까?

+1

어떤 SQL 방언 우리가 말을하는거야? 또한 DISTINCT가 문제이고'Name, *'부분이 아닌지 확신합니까? –

+0

왜이 태그는 mysql과 postgresql 둘 다 태그가 붙어 있습니까? –

+0

오류 메시지가 무엇입니까? – JJJ

답변

1

지금이 권리를 테스트 할 수있는 권한이없는,하지만 난 문제가 distinct하지라고 생각하지만, 같은 이름을 가진 각 테이블의 컬럼 (id을 같은)이 아닌 것을 그것을 알고하지 않는 두 개의 상충되는 기둥 중에서 선택할 수 있습니다. select distinct table_a.*, table_b.* ...하면 변경됩니까? 그들은 서로 다른 :-)에게 있기 때문에

+0

select distinct table_a. *, table_b. *를 사용하면 더 이상 오류가 발생하지 않지만 내가 그렇게 할 때 구별도 작동하지 않습니다 –

+0

@Devin - 그 다음에 뚜렷하게 선택할 컬럼을 선택하고'*'를 사용하는 대신 나열하십시오. – tvanfosson

+0

알았어, 고마워! –

1

DISTINCT * 아마 모든 행을 반환합니다

모두 다른 이름이 DISTINCT name 또는 이름에 대한 통계를 검색합니다 (예를 들어 카운트) SELECT name, COUNT(*) FROM ... GROUP BY name을 사용을 사용하세요.

0

뭘 원하는지 확실하지 않습니다.

두 개의 id 열이 아닌 주어진 이름의 열만 반환하려는 경우가있을 수 있습니다.

이 경우 표준 SQL 쿼리이 같다 : 선택을 수행 한 후, 행 중복 것을

SELECT * FROM table_a JOIN table_b USING (id) WHERE status=1 

키워드 DISTINCT 수단은 제거되고 (열 이름 중복되지 않음).

0

는 기본적으로 솔루션은 더 같이있다 : 당신은 속성의 열거를 피하려면

SELECT * 
FROM table_a, table_b 
JOIN table_a.id = table_b.id 
WHERE status = 1 
GROUP BY table_a.name 

이 유용합니다. 그렇게하면 관계가 변경되고 (하나의 특성이 제거되거나 추가됨) 쿼리가 작동하지 않습니다.

이 읽기 ​​: MySQL 8.3.1.13. DISTINCT Optimization

+0

이것은 아주 오래된 질문입니다! 귀하의 구문이 유효하지 않습니다 (힌트 :'FROM' 절에'table_b'라는 테이블이 포함되어 있지 않아야합니까?) 그 대답은'SELECT * FROM table_a NATURAL JOIN table_b WHERE status = 1; "이라고 의심됩니다. – onedaywhen

+0

@onedaywhen : 죄송합니다, 방금 누락 된 어휘를 수정했습니다. 대답은 무엇을 의미합니까? 허용 된 응답이 작동하지 않으며'*'를 사용할 때'DISTINCT '문제를 해결하지 못합니다. – Dyin

+0

수정 된 쿼리가 중복 된 열을 반환합니다. 물론 추측 할 수는 있습니다.하지만 OP가 별개의 행이 아닌 별개의 열을 필요로하고 NATURAL JOIN이이를 달성하는 좋은 방법이라고 생각합니다. – onedaywhen

관련 문제