我真的不确定如何最好地编写此查询。我有3个表,我需要根据其他表中的条件运行查询从一个表中提取数据。
表:调查,survey_countries,survey_categories
调查:
id | survey_id | NETWORK_ID
survey_countries :
id | survey_id | network_id |国家
survey_categories : id | survey_id | network_id |类
(survey_countries和survey_categories中的survey_id与调查表中的survey_id列相关,而不是与id列相关。)
我需要从特定国家/地区和特定类别的调查中检索数据。然后我需要能够为其他类别使用UNION,但我想我可以稍后再这样做。我的尝试:
SELECT surveys.*
FROM survey_countries
LEFT JOIN surveys ON survey_countries.survey_id = surveys.survey_id ANd survey_countries.network_id = surveys.network_id
LEFT JOIN survey_categories ON survey_countries.survey_id = surveys.survey_id AND survey_categories.network_id = surveys.network_id
WHERE survey_countries.country = 'GB'
AND survey_categories.category = 'my_category'
GROUP BY surveys.id
谢谢!
编辑:以下似乎有效:
SELECT s.*, ca.category, co.country
FROM surveys s
LEFT JOIN survey_countries co ON s.survey_id = co.survey_id AND s.network_id = co.network_id
LEFT JOIN survey_categories ca ON s.survey_id = ca.survey_id AND s.network_id = ca.network_id
WHERE ca.category = 'uncategorised'
AND co.country = 'GB';
我只是不确定这是最好的方法,因为我需要在以后获取多个类别的调查?
答案 0 :(得分:0)
没有示例数据和示例输出,帮助您进行此查询非常困难。然而.....你的第二次加入将survey_countries与调查联系在一起。我想你的意思是加入survey_categories。此外,您有一个Group By,没有聚合函数。摆脱它,直到你有太多的信息需要总结列
我不是说这是正确的,但它比你的更正确
SELECT surveys.*
FROM survey_countries
LEFT JOIN surveys
ON survey_countries.survey_id = surveys.survey_id
AND survey_countries.network_id = surveys.network_id
LEFT JOIN survey_categories
ON survey_categories.survey_id = surveys.survey_id
AND survey_categories.network_id = surveys.network_id
WHERE survey_countries.country = 'GB'
AND survey_categories.category = 'my_category'
(如果可以的话,在sqlfiddle中加载模式和示例数据。这将使这个问题更容易解决。)