所以一个移动电话问题。有一个邻接表列出所有的源和目标邻接。所以目标细胞可以是外/边界细胞或正常细胞。因此,首先我要检查目标是否是一个普通单元格,如果不是,我要从externalcell表中加载外部单元格列表。所以table是 c_adjacent_cell_4g
,正常单元格表为 c_ecell
目标细胞可以来自 c_ecell
桌上或桌上 c_externaleutrancellfdd
table。注意:源单元格始终是正常单元格,目标单元格可以是正常单元格或外部单元格。因此,我在选择一个声明时做得很糟糕。
SELECT INT_ID, int_id
FROM (
SELECT adj.int_id, if(src.earfcnDl = tgt.earfcnDl, 'ADJS', 'ADJI') AS TYPE
FROM C_ADJACENT_CELL_4G adj
JOIN C_ECELL src ON (src.int_id = adj.src_cell_int_id)
JOIN C_ECELL tgt ON (tgt.int_id = adj.adj_cell_int_id)
LEFT JOIN C_EXTERNALEUTRANCELLFDD tgt ON (tgt.int_id = adj.adj_cell_int_id)
WHERE src.earfcndl IS NOT NULL AND tgt.earfcndl IS NOT NULL) DATA;
有没有可能我应该使用union语句而不是left join。谢谢。
2条答案
按热度按时间dwbf0jvd1#
我们可以利用一个
UNION ALL
set运算符,用于合并来自C_ECELL
以及C_EXTERNALEUTRANCELLFDD
作为内联视图合并到单个集合中,然后合并到组合集合中:如果相同的
int_id
出现在两个intl
以及extl
,联接操作将匹配这两行。但我会避免工会的做法。而是对两个目标表进行外部联接。然后进行检查(在选择列表中的表达式中)以确定是否在中找到匹配项
C_ECELL
. 如果不是的话,我们一定找到了匹配的C_EXTERNALEUTRANCELLFDD
.大致如下:
(where子句中的条件保证我们在其中一个
tgt
或者ext
; 如果两行中都没有匹配的行,那么earfcndl
两个外部联接表中的列都将为空。)hzbexzde2#
你需要加入一个
UNION
的C_ECELL
以及C_EXTERNALEUTRANCELLFDD
.