[SQL] 어떻게 SQL 단지 하나의 필드에 중복없이 레코드를 선택하려면?
SQL어떻게 SQL 단지 하나의 필드에 중복없이 레코드를 선택하려면?
이 같은 3 열이있는 테이블이 있습니다 :
+------------+---------------+-------+
| Country_id | country_title | State |
+------------+---------------+-------+
이 테이블의 많은 레코드가 있습니다. 그들 중 일부는 상태를 가지고 다른하지 않습니다. 이제, 이러한 레코드를 상상 :
1 | Canada | Alberta
2 | Canada | British Columbia
3 | Canada | Manitoba
4 | China |
나는 중복없이 국가 이름이 필요합니다. 사실 나는 자신의 ID와 제목이 필요,이 할 수있는 최선의 SQL 명령은 무엇입니까? 나는 아래 양식에 DISTINCT 사용하지만 적절한 결과를 얻을 수 없었다.
SELECT DISTINCT title,id FROM tbl_countries ORDER BY title
내 원하는 결과는 다음과 같이이다 :
1, Canada
4, China
해결법
-
==============================
1.이 시도:
이 시도:
SELECT MIN(id) AS id, title FROM tbl_countries GROUP BY title
-
==============================
2.DISTINCT 키워드입니다 나를 위해 쿼리가 정확한지
DISTINCT 키워드입니다 나를 위해 쿼리가 정확한지
그냥 처음이 작업을 수행하려고
SELECT DISTINCT title,id FROM tbl_countries
나중에 당신에 의해 주문을 시도 할 수 있습니다.
-
==============================
3.DISTINCT 키워드를 사용하기 위해, 당신은 다음과 같이 사용할 수 있습니다 :
DISTINCT 키워드를 사용하기 위해, 당신은 다음과 같이 사용할 수 있습니다 :
SELECT DISTINCT (SELECT min(ti.Country_id) FROM tbl_countries ti WHERE t.country_title = ti.country_title) As Country_id , country_title FROM tbl_countries t
ROW_NUMBER ()를 사용하여 들어, 다음과 같이 사용할 수 있습니다 :
SELECT Country_id, country_title FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY country_title ORDER BY Country_id) As rn FROM tbl_countries) t WHERE rn = 1
또한 LEFT JOIN을 사용하여, 당신은이를 사용할 수 있습니다 :
SELECT t1.Country_id, t1.country_title FROM tbl_countries t1 LEFT OUTER JOIN tbl_countries t2 ON t1.country_title = t2.country_title AND t1.Country_id > t2.Country_id WHERE t2.country_title IS NULL
그리고 EXISTS의 사용, 당신은 시도 할 수 있습니다 :
SELECT t1.Country_id, t1.country_title FROM tbl_countries t1 WHERE NOT EXISTS (SELECT 1 FROM tbl_countries t2 WHERE t1.country_title = t2.country_title AND t1.Country_id > t2.Country_id)
-
==============================
4.이거 한번 해봐
이거 한번 해봐
SELECT country_id, country_title FROM (SELECT country_id, country_title, CASE WHEN country_title=LAG(country_title, 1, 0) OVER(ORDER BY country_title) THEN 1 ELSE 0 END AS "Duplicates" FROM tbl_countries) WHERE "Duplicates"=0;
-
==============================
5.MySQL의에서 특별한 열 함수의 GROUP_CONCAT 사용할 수 있습니다 :
MySQL의에서 특별한 열 함수의 GROUP_CONCAT 사용할 수 있습니다 :
SELECT GROUP_CONCAT(COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'computers' AND TABLE_NAME='Laptop' AND COLUMN_NAME NOT IN ('code') ORDER BY ORDINAL_POSITION;
MySQL의에서 정보 스키마가 모든 데이터베이스 서버가 아닌 특정 데이터베이스를 다루고 있음을 언급해야한다. TABLE_SCHEMA = '컴퓨터'즉 서로 다른 데이터베이스 경우 절은 스키마 이름을 지정해야합니다 WHERE의 조건을 검색, 동일한 이름을 가진 테이블이 포함 된 이유입니다.
문자열은 MySQL의에서 CONCAT 함수와 연결된다. 우리의 문제의 최종 해결책은 MySQL의에서 다음과 같이 표현 될 수있다 :
SELECT CONCAT('SELECT ', (SELECT GROUP_CONCAT(COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='computers' AND TABLE_NAME='Laptop' AND COLUMN_NAME NOT IN ('code') ORDER BY ORDINAL_POSITION ), ' FROM Laptop');
http://www.sql-ex.ru/help/select20.php
-
==============================
6.절을 갖는 것은 중복 오라클의 항목을 우리는 중복 데이터를 제거 할 수 있습니다 ROWID를 사용하여 찾을 수있는 가장 쉬운 방법입니다 ..
절을 갖는 것은 중복 오라클의 항목을 우리는 중복 데이터를 제거 할 수 있습니다 ROWID를 사용하여 찾을 수있는 가장 쉬운 방법입니다 ..
DELETE FROM products WHERE rowid IN ( SELECT MAX(sl) FROM ( SELECT itemcode, (rowid) sl FROM products WHERE itemcode IN ( SELECT itemcode FROM products GROUP BY itemcode HAVING COUNT(itemcode)>1 )) GROUP BY itemcode);
-
==============================
7.SQL에서 중복 행을 무시합니다. 내가 당신을 도울 수있다 생각합니다.
SQL에서 중복 행을 무시합니다. 내가 당신을 도울 수있다 생각합니다.
SELECT res2.* FROM (SELECT res1.*,ROW_NUMBER() OVER(PARTITION BY res1.title ORDER BY res1.id)as num FROM (select * from [dbo].[tbl_countries])as res1 )as res2 WHERE res2.num=1
-
==============================
8.
select Country_id,country_title from( select Country_id,country_title,row_number() over (partition by country_title order by Country_id ) rn from country)a where rn=1;
-
==============================
9.중복 행이에 의해 복잡한 쿼리를 제거 할 수 있습니다
중복 행이에 의해 복잡한 쿼리를 제거 할 수 있습니다
먼저 #TempTable @TempTableVariable 또는 그 결과를 기억
어디 상태 #TempTable 또는 @TempTableVariable에서 삭제
그런 다음 나머지 데이터를 선택합니다.
행 번호를 작성해야하는 경우 ID 열을 만듭니다.
from https://stackoverflow.com/questions/12239169/how-to-select-records-without-duplicate-on-just-one-field-in-sql by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 다른 테이블의 데이터를 하나 개의 테이블에서 업데이트 된 행이 각각 동일하고 하나의 열에 기초 (0) | 2020.06.03 |
---|---|
[SQL] PL / SQL 블록 문제 : 없음 데이터 오류를 발견 (0) | 2020.06.03 |
[SQL] ORDER BY 절은 뷰, 인라인 함수, 파생 테이블, 하위 쿼리 및 공통 테이블 표현식에서 유효하지 않습니다 (0) | 2020.06.03 |
[SQL] T-SQL은 : UPDATE 문에 CASE를 사용하여 조건에 따라 특정 열을 업데이트 (0) | 2020.06.03 |
[SQL] 어떻게 SQL Server Management Studio의 테이블에서 신속하게 편집 값? (0) | 2020.06.03 |