Android SQLite LEFT JOIN - 日期过滤器被忽略

时间:2015-04-23 19:47:23

标签: android sql sqlite select

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

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";

1 个答案:

答案 0 :(得分: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上的过滤器将会完全被忽略。