【问题标题】:sqlite select querysqlite 选择查询
【发布时间】:2010-11-22 01:20:31
【问题描述】:

我正在使用 SQLite 在 Android 中工作。

我的数据库有 2 个表:

Table 1: cars

_id(int,pri-key)
reg(text)
type(text)

Table 2: jobs

_id(int,foreign-key)
date(date)

我需要一个 sqlite 语句,它将为我提供过去 3 周内没有工作的所有汽车。我实际上是从 c# 移植应用程序,我为此使用的语句(在 MySQL 中)是

SELECT c.id, c.reg, c.type FROM buses c WHERE NOT EXISTS (SELECT NULL FROM jobs j WHERE j.id = c.id AND j.date >= CURRENT_DATE - INTERVAL 21 DAY

但我在 android 中使用的 SqliteDataBase 对象采用不同的格式,我将如何运行此查询?

提前致谢。

【问题讨论】:

    标签: sql android database sqlite


    【解决方案1】:

    我会尝试这样的:

    SELECT * from cars A LEFT OUTER JOIN jobs B on A._id = B._id WHERE B._id IS NULL OR B.date < date('now', '-21 days');

    LEFT OUTER JOIN 确保汽车表中的所有值都显示在输出中(包括不符合联接条件的值 - 即在作业表中没有条目的值)。 WHERE 条件,用于筛选作业表中没有条目 (B._id IS NULL) 或超过 21 天的 B.date < date('now', '-21 days')

    当然,我假设每辆车的 Jobs 表中只有 1 个条目。如果还有更多,您可能想使用MAX 获取最新日期。

    工作解决方案: SELECT * from cars A LEFT OUTER JOIN jobs B on A._id = B._id GROUP BY A._id HAVING B._id IS NULL OR MAX(B.date) < date('now', '-21 days');

    【讨论】:

    • 我也尝试从 sqlite3 shell 中运行查询,我得到“WHERE 语法错误附近的错误
    • @brux:我现在没有 sqlite 数据库来验证它是否有效。但更新后的 SQL 语句应该是有效的。可以试试吗?
    • “错误:滥用聚合:MAX(B.date)”
    • @brux:很抱歉。我应该在第一次自己检查时检查它。
    猜你喜欢
    • 2014-04-29
    • 1970-01-01
    • 1970-01-01
    • 2013-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-18
    • 2019-04-16
    相关资源
    最近更新 更多