python+sqlite3:using不在联接查询中

2024-10-02 02:31:47 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我期望的工作方式(c是一个游标)

    c.execute('''SELECT e1.file, e1.sourceUrl, e1.rev 
        FROM externals1 AS e1
        LEFT JOIN externals as e0
        ON (e1.file = e0.file)
        AND (e1.rev <> e0.rev)
    ''')

但这里有个错误:

^{pr2}$

带着信息

 sqlite3.OperationalError: near "e0": syntax error

怎么回事?我要处理的情况是零。在


Tags: fromexecuteas方式revleftselectfile
3条回答
SELECT e1.file, e1.sourceUrl, e1.rev 
    FROM externals1 AS e1
    LEFT JOIN externals as e0
    ON (e1.file = e0.file)
    AND (e1.rev IS NOT NULL)

NULL表示“未赋值或未知值”,因此不能等于或不等于其他值。(如何将未知或未分配的内容与其他未知或未分配的内容进行比较?)因此,不能使用<>=来测试它们;必须使用特殊运算符IS/IS代替。在

你也可以使用

^{pr2}$

如果你想测试不平等。在

!=是表示不等于的ANSI,您在第二个示例中发布的内容对于我所知的任何数据库都是无效的SQL。你可以试试:

   SELECT e1.file, e1.sourceUrl, e1.rev 
     FROM externals1 AS e1
LEFT JOIN externals as e0 ON e0.file = e1.file
                         AND e1.rev NOT IN (e0.rev)
SELECT e1.file, e1.sourceUrl, e1.rev 
FROM externals1 AS e1
LEFT JOIN externals as e0
  ON e0.file = e1.file
  AND e1.rev <> e0.rev
  AND e1.rev IS NOT NULL

构造是operand IS NULLoperand IS NOT NULL(只有一个操作数IS NUll/IS NOT NULL运算符)我想除了“not”之外还需要空值检查,但很难从问题中分辨出来。在

请记住,x <> yx或{}中的任何一个都是NULL时总是为真的。(至少对于兼容SQL89的引擎。)

祝你愉快。在

另外:一般来说,Wikipedia article on NULL是一个有趣的读物。它讨论了一些基本的NULL构造(这些构造可能完全适用于某个特定的DB…)

相关问题 更多 >

    热门问题