根据与其他表的条件从表中选择数据

时间:2013-10-07 23:57:42

标签: php mysql sql

我真的不确定如何最好地编写此查询。我有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';

我只是不确定这是最好的方法,因为我需要在以后获取多个类别的调查?

1 个答案:

答案 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中加载模式和示例数据。这将使这个问题更容易解决。)