如何使用空字段执行查询?

时间:2012-12-14 10:53:43

标签: sql postgresql

我有一个SQL查询:

SELECT documents.*, t_rights.rights, documents_list.docs
FROM documents 
INNER JOIN t_rights on t_rights.num=documents.type_right 
INNER JOIN documents_list on documents_list.num=documents.document1 
WHERE code_document=1 or code_document=1

如果我的字段documents.document1documents.document1具有某些值,则一切正常。但是如果这个字段为空,我会得到空的查询结果 它可以用空字段进行这样的查询吗?

2 个答案:

答案 0 :(得分:2)

在这种情况下,我认为您需要将INNER JOIN替换为LEFT JOIN

答案 1 :(得分:0)

即使没有匹配项,您也可以使用LEFT OUTER JOIN来包含行:

SELECT documents.*, t_rights.rights, documents_list.docs
    FROM documents 
    INNER JOIN t_rights on t_rights.num = documents.type_right 
    LEFT OUTER JOIN documents_list on
        documents_list.num = documents.document1 
    WHERE code_document=1

现在您将从文档中获取行,即使它们与documents_list中的任何内容都不匹配。但是,您可能希望仅包含 document1字段为空的不匹配文档。在这种情况下,您需要更多:

SELECT documents.*, t_rights.rights, documents_list.docs
    FROM documents 
    INNER JOIN t_rights on t_rights.num = documents.type_right 
    LEFT OUTER JOIN documents_list on
        documents_list.num = documents.document1 
    WHERE code_document = 1 and (
        documents_list.num is not null or
        documents.document1 is null
    )

这只返回与document_list匹配的文档,除了 document1为空的那些情况(我假设“空”表示null;如果没有,把你自己的条件放在那里。)