我的数据库有问题。我有三个对应的表,其中第一个包含一些页面,第二个包含一些字段。
第三个是一个表,其中包含页面中所有字段的内容。
表格:
页面(PageID,名称)
字段(FieldID,FieldName);
pagefields(PageFieldID,FieldID,PageID)
pagefieldcontents(PageFieldContentID,PageFieldID,FieldID,PageID,内容)
我需要确保即使表“ pagefields”中的字段没有值,但是如果该字段与页面相关(在pagefields表中),它将作为具有值的行返回作为一个空字符串。
我现在正在做以下事情:
SELECT
pfc.ContentID as PFC_ContentID,
pfc.Content as PFC_FieldContent,
pfc.FieldID as PFC_FieldID
FROM
pagesfieldcontents pfc
INNER JOIN
pagefields pf
ON pf.PageID = pfc.PageID
INNER JOIN
fields ptf
ON pf.FieldID = ptf.FieldID
INNER JOIN
pages p
ON p.PageID = pf.PageID
WHERE
(some where-statement)
ORDER BY
somefield desc
希望你能理解我的问题-祝你有美好的一天。
最佳答案
内部联接要求联接表中必须有一行才能返回第一个选项卡的行。但是您可能拥有字体包含内容的字段,并且不愿意返回这些内容...
将您所有的INNER联接更改为LEFT联接:
SELECT
pfc.ContentID as PFC_ContentID,
pfc.Content as PFC_FieldContent,
pfc.FieldID as PFC_FieldID
FROM pages p
LEFT JOIN pagefields pf
ON p.PageID = pf.PageID
LEFT JOIN fields ptf
ON pf.FieldID = ptf.FieldID
LEFT JOIN pagesfieldcontents pfc
ON p.PageID = pfc.PageID
AND pf.FieldID = pfc.FieldID
WHERE some where-statement
ORDER BY somefield desc
我还重新排列了表的顺序和联接条件,以满足您的需求。
关于mysql - 从数据库中获取“不存在”的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17902528/