我有一个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
具有某些值,则一切正常。但是如果这个字段为空,我会得到空的查询结果
它可以用空字段进行这样的查询吗?
答案 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;如果没有,把你自己的条件放在那里。)