【问题标题】:combination of "WHERE NOT EXISTS" & "SELECT 1 FROM" not working“WHERE NOT EXISTS”和“SELECT 1 FROM”的组合不起作用
【发布时间】:2015-10-07 01:08:23
【问题描述】:

我有一个查询在 SQLite 中工作,但在 MySQL 中不工作。

我正在使用:PHP、PDO、SQLite 和 MySQL

这里是查询:

INSERT INTO mytable (id, name, tag, timestamp)
    SELECT 11, 'Legio', 'LR', 1234567
        WHERE NOT EXISTS (
            SELECT 1 FROM mytable 
                WHERE id = 11 AND name = 'Legio' AND tag = 'LR' AND timestamp = (
                    SELECT max(timestamp) FROM mytable WHERE id = 11))

结果是错误信息:

第 3 行的“WHERE NOT EXISTS (SELECT 1 FROM mytable WHERE id = 11 AND name”附近的语法错误。

这个查询在 MySQL 中有什么问题?

是否可以修改此语句以在 MySQL 和 SQLite 中工作???

【问题讨论】:

标签: php mysql sqlite


【解决方案1】:

使用WHERE 子句时需要从表名中进行选择。由于您实际上并不是从真实表中进行选择,因此您可以使用特殊表名DUAL

INSERT INTO mytable (id, name, tag, timestamp)
SELECT 11, 'Legio', 'LR', 1234567
FROM DUAL
WHERE NOT EXISTS (
    SELECT 1 FROM mytable 
    WHERE id = 11 AND name = 'Legio' AND tag = 'LR' 
        AND timestamp = (
            SELECT max(timestamp) FROM mytable WHERE id = 11))

【讨论】:

    【解决方案2】:

    应该是:

    SELECT 11, 'Legio', 'LR', 1234567 FROM `table_name` WHERE NOT EXISTS...
    

    你错过了 FROM。

    【讨论】:

    • 我不认为...我不会从任何表中选择这些值。此语句在 SQLite 中有效。
    • 如果可以的话试试吧,也许它期待一个 FROM - 你可以在 table_name 中拥有任何表格
    猜你喜欢
    • 1970-01-01
    • 2016-05-19
    • 2020-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多