1

我有一个 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.document1并且documents.document1具有某些值,则一切正常。但是如果这个字段为空,我会得到空的查询结果。
它可以用空字段进行这样的查询吗?

4

2 回答 2

2

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

于 2012-12-14T10:55:34.437 回答
0

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

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 的情况(我假设“空”是指 null;如果不是,请将您自己的条件放在那里)。

于 2012-12-14T11:02:22.393 回答