单个SQL查询中的多个比较

问题描述 投票:0回答:2

我需要通过比较不同视图中的两列来获取地址行

一个是地址数据库

    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数量的结果。

sql sqlite join sql-like
2个回答
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',而不是其他值之一。


0
投票

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)的一种好习惯。

© www.soinside.com 2019 - 2024. All rights reserved.