从数据库中获取“不存在的”值

时间:2013-07-27 21:15:54

标签: mysql database join inner-join

我的数据库出错了。我有三个相应的表,第一个是我拿着一些页面,第二个是持有一些字段。 第三个是一个表格,其中包含页面中所有字段的内容。

表格:

  • 页面(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

希望你能理解我的问题 - 祝你有个美好的一天。

1 个答案:

答案 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

我还重新排列了表格顺序并将条件加入到我猜你需要的条件中。