하위 쿼리 관련 쿼리에서 중간 테이블의 포괄적 사용

SQL 연결 (JOIN) 

수요:

  • 사업자 등록 정보와 시스템 등록 정보의 불일치 문제 조회
  • 일관성있는 필드는 표시되지 않고, 일관성없는 필드는 "●"로 표시됩니다.
  • 외부 시스템에서 한 명의 투자자 지분율 만 비어있는 경우 지분율 경고시 빈 원이 표시됩니다.

SQL 쿼리 지침 : 

  • 왼쪽 조인과 조인 쿼리의 차이점에 유의하십시오.
  • 경우 사용
  • 관련 쿼리를 통해 가상 중간 테이블을 얻을 수 있으며 중간 테이블을 기반으로 관련 쿼리, 하위 쿼리 등을 만들 수 있습니다.
  • 먼저 그것을 처리하는 방법을 생각하고 복잡한 문제를 여러 개의 간단한 문제로 나누고 마지막으로 함께 결합하십시오.

 쿼리 결과 미리보기 :

  • 디스플레이 필드의 일부

작은 테스트 : 

SELECT
	count( a.unitid ) AS "条数",
	HEX( a.unitid ) AS "单位ID" 
FROM
	PMS_COMPANY_HOLDER AS a 
WHERE
	a.HOLDER_ZB_NEW = '' 
	AND HEX( a.unitid ) IN (
SELECT
	HEX( g.unitid ) 
FROM
	GXJT_YJ AS g
	LEFT JOIN md_org AS m ON m.recid = g.unitid
	LEFT JOIN PMS_COMPANY_INFO AS p ON m.recid = p.unitid 
WHERE
	HEX( g.unitid ) LIKE '%67%' 
	AND g.warningType = 'REGISTRATION_DIFFERENT' 
	) 
GROUP BY
	a.unitid

 

 당신의 능력을 보여주세요 :

define query ad_query(@unitId string)                  
begin   
SELECT
	w.stdname AS "单位",
CASE	
	WHEN w.WARNINGREASON CONTAINS 'COMPANY_NAME' THEN
	'       ●' 
	END AS "企业名称",
CASE	
		WHEN y.num > 0 THEN
		'       ○' 
		WHEN w.WARNINGREASON CONTAINS 'EQUITY_SITUATION' THEN
		'       ●' 
	END AS "股权情况",
CASE
		WHEN w.WARNINGREASON CONTAINS 'LEGAL_REPRESENTATIVE' THEN
		'       ●' 
	END AS "法定代表人",
CASE
		WHEN w.WARNINGREASON CONTAINS 'REGISTERED_CAPITAL' THEN
		'       ●' 
	END AS "注册资本",
CASE
		WHEN w.WARNINGREASON CONTAINS 'REGISTRATION_PROVIENCE' THEN
		'       ●' 
	END AS "注册地",
CASE
		WHEN w.WARNINGREASON CONTAINS 'REGISTRATION_DATE' THEN
		'       ●' 
	END AS "注册日期",
	w.COMPANY_S_EXT_NODENUM AS "所属省份",
	w.UNITID AS "单位id",
	w.GQ_DATATIME AS "股权数据时期",
	w.GS_DATATIME AS "工商数据时期" 
FROM
	(
	SELECT
		m.stdname,
	CASE	
			WHEN g.WARNINGREASON CONTAINS 'COMPANY_NAME' THEN
			'       ●' 
		END AS "COMPANY_NAME",
	CASE	
			WHEN g.WARNINGREASON CONTAINS 'EQUITY_SITUATION' THEN
			'       ●' 
		END AS "EQUITY_SITUATION",
	CASE	
			WHEN g.WARNINGREASON CONTAINS 'LEGAL_REPRESENTATIVE' THEN
			'       ●' 
		END AS "LEGAL_REPRESENTATIVE",
	CASE	
			WHEN g.WARNINGREASON CONTAINS 'REGISTERED_CAPITAL' THEN
			'       ●' 
		END AS "REGISTERED_CAPITAL",
	CASE	
			WHEN g.WARNINGREASON CONTAINS 'REGISTRATION_PROVIENCE' THEN
			'       ●' 
		END AS "REGISTRATION_PROVIENCE",
	CASE	
			WHEN g.WARNINGREASON CONTAINS 'REGISTRATION_DATE' THEN
			'       ●' 
		END AS "REGISTRATION_DATE",
		p.COMPANY_S_EXT_NODENUM AS "COMPANY_S_EXT_NODENUM",
		g.UNITID AS "UNITID",
		g.GQ_DATATIME AS "GQ_DATATIME",
		g.GS_DATATIME AS "GS_DATATIME",
		g.WARNINGREASON AS "WARNINGREASON" 
	FROM
		GXJT_YJ AS g
		JOIN md_org AS m ON m.recid = g.unitid
		JOIN PMS_COMPANY_INFO AS p ON m.recid = p.unitid 
	WHERE
		to_char ( m.parents ) CONTAINS ( to_char ( @unitId ) ) 
		AND g.warningType = 'REGISTRATION_DIFFERENT' 
	) AS w
	LEFT JOIN (
	SELECT
		count( a.unitid ) AS num,
		a.unitid 
	FROM
		PMS_COMPANY_HOLDER AS a 
	WHERE
		a.HOLDER_ZB_NEW = '' 
		AND a.unitid IN (
		SELECT
			g.unitid 
		FROM
			GXJT_YJ AS g
			JOIN md_org AS m ON m.recid = g.unitid
			JOIN PMS_COMPANY_INFO AS p ON m.recid = p.unitid 
		WHERE
			to_char ( m.parents ) CONTAINS ( to_char ( @unitId ) ) 
			AND g.warningType = 'REGISTRATION_DIFFERENT' 
		) 
	GROUP BY
	a.unitid 
) AS y ON y.unitid = w.UNITID

end

 

추천

출처blog.csdn.net/xiangwang2016/article/details/102738235