我需要通过比较不同视图中的两列来获取地址行
一个是地址数据库
CREATE TABLE IDData (
id INTEGER PRIMARY KEY AUTOINCREMENT,
cgi STRING,
cellid STRING,
address STRING,
);
还有另一个表,
CREATE TABLE cdata (
id INTEGER PRIMARY KEY AUTOINCREMENT,
fcellid TEXT,
);
IDData
id cgi cellid address
1 123456789879 9879 512- baker street london
2 {blank} 9462 23 panama beach
3 456789879324 {blank} Chandni chowk delhi
cdata
id fcellid
1 123456789879
2 9462
3 9324
结果应为
fcellid address
123456789879 512- baker street london
9462 23 panama beach
9324 Chandni chowk delhi
现在我想做的是
SELECT fcellid,iii.address FROM cdata as dd left JOIN IDData as iii ON (iii.cgi like '%' || dd.fcellid or dd.fcellid like '%' || iii.cgi) or (iii.cellid like '%' || dd.fcellid or dd.fcellid like '%' || iii.cellid );
但不能像期望的那样提供太多结果,因为它会从每个条件返回结果,我只想获取cdata中fcellid数量的结果。
我认为此逻辑可以满足您的要求:
SELECT fcellid, i.address
FROM cdata dd left join
IDData i
ON dd.fcellid like ('%' || i.cgi) or
dd.fcellid like ('%' || i.cellid) ;
或更简单地说:
SELECT fcellid, i.address
FROM cdata dd left join
IDData i
ON dd.fcellid ~ concat('(', i.cgi, '|', i.cellid, ')$')
但是,这并不能完全返回您想要的结果集,因为第3行的匹配项是'Chandni chowk delhi'
,而不是其他值之一。
LEFT JOIN类型的联接将在其他情况下为您返回更多记录,如果我对您的问题了解得很好的话。我相信最好使用INNER JOIN或只是JOIN这是同一回事。
SELECT fcellid, address
FROM
cdata (NOLOCK)
JOIN IDData (NOLOCK)
ON
cgi LIKE CONCAT('%',fcellid)
OR
cellid LIKE CONCAT ('%', fcellid)
也总是在SELECT语句中使用(NOLOCK)的一种好习惯。