Join中的SQLite通配符

时间:2014-12-28 10:47:17

标签: sqlite join sqldf

在我之前的question中,似乎我的问题依赖于SQLite。我把问题简化如下:

假设我有两个表:table1如下

Name     | col1
------------------------
 Bob     | B1
Mary Jane| M1

和table2如下:

Name     | col2
------------------------------
 Bob     | B2
Mary     | M2

我想要的是将它们加在一起以获得:

NameA     | NameB |col1| col2
-------------------------------------
 Bob      | Bob   | B1 | B2
Mary Jane | Mary  | M1 | M2

使用

SELECT tablea.Name as NameA, tableb.Name as NameB, tablea.col1, tableb.col2
FROM table1 as tablea
LEFT JOIN table2 as tableb
ON tablea.Name LIKE tableb.Name

我得到输出

      NameA NameB col1 col2
1       Bob   Bob  B1   B2
2 Mary Jane  <NA>  M1  <NA>

这是我所期待的。现在,如果我按如下方式使用通配符:

SELECT tablea.Name as NameA, tableb.Name as NameB, tablea.col1, tableb.col2
FROM table1 as tablea
LEFT JOIN table2 as tableb
ON tablea.Name LIKE '%'+tableb.Name+'%'

我明白了:

      NameA NameB col1 col2
1       Bob  <NA>  B1  <NA>
2 Mary Jane  <NA>  M1  <NA>

它甚至不匹配Bob的条目?!

我错过了什么吗?这是SQLite的问题吗?

为了完整起见,我使用sqldf函数与R使用SQLite

2 个答案:

答案 0 :(得分:1)

使用||运算符来连接字符串,而不是+

答案 1 :(得分:0)

对于您的示例数据,您不需要LEFT JOIN

SELECT tablea.Name AS NameA, tableb.Name AS NameB, tablea.col1, tableb.col2
FROM table1 as tablea
INNER JOIN table2 as tableb
ON tablea.Name LIKE '%'||tableb.Name||'%';

SELECT tablea.Name AS NameA, tableb.Name AS NameB, tablea.col1, tableb.col2
FROM table1 as tablea
INNER JOIN table2 as tableb
ON INSTR(tablea.Name, tableb.Name) > 0;

第二版可获得潜在的性能提升。

SQL Fiddle