我有一个观点cnst_prsn_nm。我想检查共享相同的cnst_mstr_id和相同的姓氏,但名字不同的记录。所以,我在Teradata的SQL做LEFT JOIN后群集和HAVING
SELECT TOP 20 prsn_nm_a.cnst_mstr_id FROM arc_mdm_vws.bz_cnst_prsn_nm prsn_nm_a
INNER JOIN arc_mdm_vws.bz_cnst_prsn_nm prsn_nm_b
ON prsn_nm_a.cnst_mstr_id = prsn_nm_b.cnst_mstr_id
GROUP BY prsn_nm_a.cnst_mstr_id
HAVING COUNT(DISTINCT prsn_nm_a.bz_cnst_prsn_last_nm) = 1
WHERE prsn_nm_a.bz_cnst_prsn_first_nm <> prsn_nm_b.bz_cnst_prsn_first_nm
然后这些记录cnst_mstr_ids,我想检查另一个表cnst_mstr。 基本上我想检查那里左加入IS NULL
LEFT JOIN arc_mdm_vws.bzal_cnst_mstr mstr_new
ON prsn_nm_a.cnst_mstr_id = mstr_new.new_cnst_mstr_id
WHERE mstr_new.new_cnst_mstr_id IS NULL
所以我的查询变得基本
SELECT TOP 20 prsn_nm_a.cnst_mstr_id FROM arc_mdm_vws.bz_cnst_prsn_nm prsn_nm_a
INNER JOIN arc_mdm_vws.bz_cnst_prsn_nm prsn_nm_b
ON prsn_nm_a.cnst_mstr_id = prsn_nm_b.cnst_mstr_id
GROUP BY prsn_nm_a.cnst_mstr_id
HAVING COUNT(DISTINCT prsn_nm_a.bz_cnst_prsn_last_nm) = 1
WHERE prsn_nm_a.bz_cnst_prsn_first_nm <> prsn_nm_b.bz_cnst_prsn_first_nm
LEFT JOIN arc_mdm_vws.bzal_cnst_mstr mstr_new
ON prsn_nm_a.cnst_mstr_id = mstr_new.new_cnst_mstr_id
WHERE mstr_new.new_cnst_mstr_id IS NULL
但有两个WHERE子句。 HAVING之后,LEFT JOIN也不能直接在那里。如果在与分组关联的筛选器中,如何在Group By和HAVING Clause之后进行左连接?
我删除了MySQL标签,因为语法显然不是MySQL。 –
有道理。但我希望这是一般的SQL相关问题,而不是任何RDBMS具体的问题。 – StrugglingCoder
TOP是产品特定的。 – jarlh