我的数据库有问题。我有三个对应的表,其中第一个包含一些页面,第二个包含一些字段。
第三个是一个表,其中包含页面中所有字段的内容。

表格:


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

10-12 07:29