[SQL] 왼쪽은 왼쪽 테이블에서 중복 행없이 가입
SQL왼쪽은 왼쪽 테이블에서 중복 행없이 가입
다음 쿼리를보고하십시오 :
tbl_Contents
Content_Id Content_Title Content_Text
10002 New case Study New case Study
10003 New case Study New case Study
10004 New case Study New case Study
10005 New case Study New case Study
10006 New case Study New case Study
10007 New case Study New case Study
10008 New case Study New case Study
10009 New case Study New case Study
10010 SEO News Title SEO News Text
10011 SEO News Title SEO News Text
10012 Publish Contents SEO News Text
tbl_Mediya
Media_Id Media_Title Content_Id
1000 New case Study 10012
1001 SEO News Title 10010
1002 SEO News Title 10011
1003 Publish Contents 10012
질문
SELECT
C.Content_ID,
C.Content_Title,
M.Media_Id
FROM tbl_Contents C
LEFT JOIN tbl_Media M ON M.Content_Id = C.Content_Id
ORDER BY C.Content_DatePublished ASC
결과
10002 New case Study 2014-03-31 13:39:29.280 NULL
10003 New case Study 2014-03-31 14:23:06.727 NULL
10004 New case Study 2014-03-31 14:25:53.143 NULL
10005 New case Study 2014-03-31 14:26:06.993 NULL
10006 New case Study 2014-03-31 14:30:18.153 NULL
10007 New case Study 2014-03-31 14:30:42.513 NULL
10008 New case Study 2014-03-31 14:31:56.830 NULL
10009 New case Study 2014-03-31 14:35:18.040 NULL
10010 SEO News Title 2014-03-31 15:22:15.983 1001
10011 SEO News Title 2014-03-31 15:22:30.333 1002
10012 Publish 2014-03-31 15:25:11.753 1000
10012 Publish 2014-03-31 15:25:11.753 1003
10012 두 번오고있다 ...!
(조인에 왼쪽 테이블) 내 쿼리는 tbl_Contents에서 중복 행을 반환
tbl_Contents 일부 행 tbl_Media에서 1 개 이상의 관련 행이 있습니다. 나는이 널 값있는 tbl_Media하지만 중복 레코드에있는 경우에도 tbl_Contents의 모든 행이 필요합니다.
해결법
-
==============================
1.OUTER가 적용 시도
OUTER가 적용 시도
SELECT C.Content_ID, C.Content_Title, C.Content_DatePublished, M.Media_Id FROM tbl_Contents C OUTER APPLY ( SELECT TOP 1 * FROM tbl_Media M WHERE M.Content_Id = C.Content_Id ) m ORDER BY C.Content_DatePublished ASC
양자 택일로, 당신은 결과에 GROUP을 할 수
SELECT C.Content_ID, C.Content_Title, C.Content_DatePublished, M.Media_Id FROM tbl_Contents C LEFT OUTER JOIN tbl_Media M ON M.Content_Id = C.Content_Id GROUP BY C.Content_ID, C.Content_Title, C.Content_DatePublished, M.Media_Id ORDER BY C.Content_DatePublished ASC
외측은 선택을 왼쪽 테이블의 각 행에 일치하는 하나의 행 (또는 없음)을 적용한다.
그룹이 전체 가입 수행하지만 다음 제공된 컬럼에 대한 최종 결과 행을 축소합니다.
-
==============================
2.당신은 GROUP BY와 함께이 사용하는 일반적인 SQL을 수행 할 수 있습니다 :
당신은 GROUP BY와 함께이 사용하는 일반적인 SQL을 수행 할 수 있습니다 :
SELECT C.Content_ID, C.Content_Title, MAX(M.Media_Id) FROM tbl_Contents C LEFT JOIN tbl_Media M ON M.Content_Id = C.Content_Id GROUP BY C.Content_ID, C.Content_Title ORDER BY MAX(C.Content_DatePublished) ASC;
또는 상관 하위 쿼리와 함께 :
SELECT C.Content_ID, C.Contt_Title, (SELECT M.Media_Id FROM tbl_Media M WHERE M.Content_Id = C.Content_Id ORDER BY M.MEDIA_ID DESC LIMIT 1 ) as Media_Id FROM tbl_Contents C ORDER BY C.Content_DatePublished ASC;
물론, 한계 1의 구문은 데이터베이스간에 다릅니다. 상단 될 수 있습니다. 또는 ROWNUM = 1 또는 처음 1 행을 가져옵니다. 또는 그런 일.
-
==============================
3.DISTINCT 플래그를 사용하면 중복 행을 제거합니다.
DISTINCT 플래그를 사용하면 중복 행을 제거합니다.
SELECT DISTINCT C.Content_ID, C.Content_Title, M.Media_Id FROM tbl_Contents C LEFT JOIN tbl_Media M ON M.Content_Id = C.Content_Id ORDER BY C.Content_DatePublished ASC
from https://stackoverflow.com/questions/22769641/left-join-without-duplicate-rows-from-left-table by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 우리는 그것없이 가입 할 수있을 때 왜 기본 - 외부 키 관계가 필요합니까? (0) | 2020.06.02 |
---|---|
[SQL] 엔티티 프레임 워크 4 코드 첫 번째로 사용 오류 데이터베이스 (0) | 2020.06.02 |
[SQL] MySQL의 : LEFT와 GROUP_CONCAT는 가입 (0) | 2020.06.01 |
[SQL] 하나의 ID 열이있는 테이블에 행을 삽입 만 (0) | 2020.06.01 |
[SQL] 3에서 6 무작위 int 값을 생성 (0) | 2020.06.01 |