SQLite:在连接或字符串中使用未初始化的值$“。如果没有这个,我怎么能使用左连接?

时间:2014-01-20 02:50:40

标签: sqlite join left-join inner-join

我正在使用SQLite日志解析器来处理以下形式的一些Apache日志:

X.Y.Z.W - userID1 [01/Jan/2014:06:31:22 -0400] "GET /url1 HTTP/1.1" 200 11366400 "redirecturl1" "user agent1"
X2.Y2.Z2.W2 - userID1 [01/Jan/2014:07:31:22 -0400] "GET /url2 HTTP/1.1" 200 11366400 "redirecturl2" "user agent2"
Etc...

我想与这些日志进行一些比较,因此我创建了一个辅助表(urlcompare)来将它们与以下内容进行比较:

CREATE TABLE urlcompare (id INTEGER PRIMARY KEY, Request TEXT NOT NULL, RequestName TEXT NOT NULL);
INSERT INTO urlcompare VALUES (null, '/url1', 'TOTAL');
INSERT INTO urlcompare VALUES (null, '/url2', 'TOTAL');
INSERT INTO urlcompare VALUES (null, '/url3', 'TOTAL');
INSERT INTO urlcompare VALUES (null, '/url4', 'TOTAL');
INSERT INTO urlcompare VALUES (null, '/url5', 'TOTAL');
INSERT INTO urlcompare VALUES (null, '/url6', 'TOTAL');
INSERT INTO urlcompare VALUES (null, '/url7', 'TOTAL');
INSERT INTO urlcompare VALUES (null, '/url8', 'TOTAL');

在SQLite脚本上,我加载了我的日志文件:

load logfile

然后我尝试从与urlcompare中的url匹配的日志中选择url,(表“logs”包含以SQLite形式解析日志文件):

SELECT user, MIN(datetime(Date, 'utc')) AS Mintime FROM urlcompare LEFT JOIN logs ON urlcompare.Request=logs.Request GROUP BY user ORDER BY urlcompare.id ASC;

我得到了结果和错误:

Use of uninitialized value $" in join or string at /usr/bin/asql line 593.

注意:如果我用内部联接替换左连接,我会得到相同的结果而没有错误/警告。但是,我有一些区域需要将日志文件与网址中的网址进行比较table(表A)并在日志文件中显示表A中的所有url及其“hits”(即我需要显示0次点击的url)。因此,我需要“表A LEFT JOIN日志”,在这些情况下,如何解决问题而不会出现此错误?

1 个答案:

答案 0 :(得分:0)

当我离开表格

时,我想我理解了这个问题
FROM tableA LEFT JOIN TableB ON TableA.attributeC = TableB.attributeC 

LEFT JOIN关键字返回左表(tableA)中的所有行,右表(tableB)中的匹配行。 当没有匹配时,右侧的结果为NULL。

所以当我尝试从tableB中检索没有匹配的参数时,我得到一个“null”......