2013-07-27 5 views
0

У меня возникли проблемы с моей базой данных. У меня есть три соответствующие таблицы, где в первом я держу несколько страниц, а во втором - несколько полей. Третий - это таблица, содержащая контент для всех полей на страницах.Получить «несуществующие» значения из базы данных

Таблицы:

  • страницы (PageId, имя)

  • поля (FieldID, FieldName);

  • pagefields (PageFieldID, FieldID, PageId)

  • pagefieldcontents (PageFieldContentID, PageFieldID, FieldID, PageId, содержание)

Что мне нужно, чтобы убедиться, что даже если в таблица «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

Не будет PageFieldID также отображаться в содержимом страниц? В противном случае, в чем смысл? Но, чтобы ответить на ваш вопрос, вы, вероятно, хотите ВЗГЛЯДЬ, а не ИННЕР – Strawberry

+0

Конечно, это будет .. Мой плохой! :) – denlau

+0

Клубника: Как бы я это сделал на практике? – denlau

ответ

1

ВНУТРЕННИЕ СОБЫТИЯ требуется там, где будет строка в объединенном столе для возврата первой строки табеля. Но вы можете иметь поля, шрифт есть содержание, и вы хотите зазывал, возвращаемые ...

Изменить все ваши INNER присоединяется к СЛЕВА присоединяется:

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 

Я также изменил порядок таблицы и условия соединения для я думаю, вам нужно.

+0

Это сработало отлично .. Я думаю, что это было 2-оговорка «на» в последнем соединении, я отсутствовал. Спасибо! :) – denlau

Смежные вопросы