2017-01-30 44 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显示数据。

您正在寻找的确切解决方案是,当您从中检索数据的所有表中具有相同的主键时。

谢谢。