在我之前的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
。
答案 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;
第二版可获得潜在的性能提升。