Uso abrangente de tabelas intermediárias em consultas relacionadas a subconsultas

Conexão SQL (JOIN) 

exigem:

  • Consulte o problema de inconsistência entre as informações de registro da empresa e as informações de registro no sistema
  • Os campos consistentes não são marcados, os campos inconsistentes são marcados com "●"
  • Se apenas o índice de patrimônio líquido de um investidor no sistema externo estiver vazio, um círculo vazio será exibido quando o índice de patrimônio líquido for avisado.

Diretrizes de consulta SQL: 

  • Observe a diferença entre junção à esquerda e consulta de junção
  • Uso de caso quando
  • Uma tabela intermediária virtual pode ser obtida por consulta relacionada, e consultas relacionadas, subconsultas, etc. podem ser feitas com base na tabela intermediária.
  • Primeiro pense em como lidar com isso, divida um problema complexo em vários problemas simples e, finalmente, junte-os.

 Visualização dos resultados da consulta:

  • Parte do campo de exibição

Pequeno teste: 

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

 

 Mostre suas habilidades:

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

 

Acho que você gosta

Origin blog.csdn.net/xiangwang2016/article/details/102738235
Recomendado
Clasificación