2017-01-30 43 views
0

請在下面找到我設置的表結構和我正在運行的查詢的鏈接。SQL查詢從3-4個表中進行選擇

Link to tables and query.

本結果是,只有firstnames,lastnames和 「education_finished」 被示出。但是所有的option_id和它們相關的lang_values仍然顯示「NULL」。

期望的結果:

can be found here ...

任何建議如何解決?

+0

你能展示預期的結果嗎? – Jens

+0

'phpbb_profile_fields_data'和'phpbb_profile_fields_data'之間沒有任何相關的字段 – McNets

+0

ON d.pf_education_finished = f.field_name' – McNets

回答

1

下面是你正在使用的查詢:

SELECT d.pf_firstname, d.pf_lastname, f.field_id, fl.option_id, 
d.pf_education_finished, fl.lang_value 
FROM phpbb_profile_fields_data d 
LEFT JOIN phpbb_profile_fields f 
ON d.pf_education_finished = f.field_name 
LEFT JOIN phpbb_profile_fields_lang fl 
ON f.field_id = fl.field_id 
ORDER BY d.pf_lastname ASC 

爲什麼你越來越null值的原因是因爲這種情況:

LEFT JOIN phpbb_profile_fields f 
ON d.pf_education_finished = f.field_name 

您試圖join上pf_education_finished(int )一個表的字段和另一個表的field_name(int)字段。此外,沒有匹配的值(例如pf_education_finished包含數字,而field_name是「完成教育」)。

如果您想查詢,以便對field_idphpbb_profile_fields需要返回的東西,那麼你需要join有一些記錄匹配字段ID,例如:

SELECT d.pf_firstname, d.pf_lastname, f.field_id, fl.option_id, 
d.pf_education_finished, fl.lang_value 
FROM phpbb_profile_fields_data d 
LEFT JOIN phpbb_profile_fields f 
ON d.pf_education_finished = f.field_id 
LEFT JOIN phpbb_profile_fields_lang fl 
ON f.field_id = fl.field_id 
ORDER BY d.pf_lastname ASC 

下面是更新SQL Fiddle

1
SELECT d.pf_firstname, d.pf_lastname, f.field_id, fl.option_id, 
d.pf_education_finished, fl.lang_value 
FROM phpbb_profile_fields_lang fl 
inner JOIN phpbb_profile_fields f 
ON f.field_id = fl.field_id 
inner JOIN phpbb_profile_fields_data d 
ON f.field_id = fl.field_id 
ORDER BY d.pf_lastname ASC 

這是可選的查詢,如果你想從3-4表,但在此查詢名稱重複按了count of field_id目前在phpbb_profile_fields_lang顯示數據。

您正在尋找的確切解決方案是,當您從中檢索數據的所有表中具有相同的主鍵時。

謝謝。