【问题标题】:Android SQLite LEFT JOIN - Date Filter is being ignoredAndroid SQLite LEFT JOIN - 日期过滤器被忽略
【发布时间】:2015-04-23 19:47:22
【问题描述】:

我创建了一个从 3 个数据库表中获取数据的查询。 在表Movimenti 我有一个日期字段yyyy-MM-dd,使用where 子句我只想获取给定的数据,而不是从所有日期获取数据,我错在哪里?

String tabella_op = "SELECT m.id_operatore, " +
            "m.date, " +
            "m.ora_inizio, " +
            "m.minuti_inizio, " +
            "m.ora_fine, " +
            "m.minuti_fine, " +
            "m.id_servizio, " +
            "c._id, " +
            "c.nome, " +
            "c.cognome, " +
            "o.nome, " +
            "s.colore " +
            "FROM Movimenti m " +
            "LEFT JOIN Clienti c ON (m.id_cliente = c._id) " +
            "LEFT JOIN Servizi s ON (m.id_servizio = s._id) " +
            "LEFT JOIN Operatori o ON (o._id = m.id_operatore) " +
            "AND m.date = 2015-04-23 ORDER BY m.id_operatore ASC";

【问题讨论】:

  • 这似乎不是正确的语法。 WHERE 在哪里?我很惊讶它甚至可以执行。

标签: android sql sqlite select


【解决方案1】:

您需要将主LEFT 表(Movimenti)上的过滤器从JOIN 条件中移回WHERE 子句:

String tabella_op = "SELECT m.id_operatore, " +
        "m.date, " +
        "m.ora_inizio, " +
        "m.minuti_inizio, " +
        "m.ora_fine, " +
        "m.minuti_fine, " +
        "m.id_servizio, " +
        "c._id, " +
        "c.nome, " +
        "c.cognome, " +
        "o.nome, " +
        "s.colore " +
        "FROM Movimenti m " +
        "LEFT JOIN Clienti c ON (m.id_cliente = c._id) " +
        "LEFT JOIN Servizi s ON (m.id_servizio = s._id) " +
        "LEFT JOIN Operatori o ON (o._id = m.id_operatore) " +
        "WHERE m.date = 2015-04-23 ORDER BY m.id_operatore ASC";

更多关于为什么它像 this here 一样工作,但 TL;DR 是如果 LEFT JOINs 中的任何一个失败,那么 m.Date 上的过滤器将被完全忽略。 p>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-07
    • 1970-01-01
    • 1970-01-01
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多