我的数据库出错了。我有三个相应的表,第一个是我拿着一些页面,第二个是持有一些字段。 第三个是一个表格,其中包含页面中所有字段的内容。
表格:
页面(PageID,名称)
字段(FieldID,FieldName);
pagefields(PageFieldID,FieldID,PageID)
pagefieldcontents(PageFieldContentID,PageFieldID,FieldID,PageID,Content)
我需要确保的是,即使表格中的“pagefields”对于某个字段是NO值,但如果该字段与该页面相关(在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
希望你能理解我的问题 - 祝你有个美好的一天。
答案 0 :(得分:1)
INNER JOIN 要求在连接表中有一行要返回第一个tabke的行。但是你可能有字体含有内容的字段,并且你希望那些返回的内容......
将所有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
我还重新排列了表格顺序并将条件加入到我猜你需要的条件中。