我需要通过比较不同视图中的两列来获取地址行
一个是地址数据库
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数量的结果。
答案 0 :(得分:1)
我认为这种逻辑符合你的要求:
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'
,而不是其他值之一。
答案 1 :(得分:0)
如果我理解你的问题,LEFT JOIN类型的联接将在其他场景中返回您期望的更多记录。我相信最好使用INNER JOIN或只是JOIN,这是同样的事情。
SELECT fcellid,address 从 cdata(NOLOCK) JOIN IDData(NOLOCK) 上 cgi喜欢CONCAT('%',fcellid) 要么 cellid LIKE CONCAT('%',fcellid)
在SELECT语句中也始终使用(NOLOCK)。