0

我真的不确定如何最好地编写此查询。我有 3 个表,我需要根据其他表中的条件运行从其中一个提取数据的查询。

表:调查、调查国家、调查类别

调查
ID | 调查ID | network_id

调查国家
ID | 调查ID | 网络 ID | 国家

调查类别:ID | 调查ID | 网络 ID | 类别

(survey_countries 和survey_categories 中的survey_id 与surveys 表中的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';

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

4

1 回答 1

0

如果没有示例数据和示例输出,在此查询上帮助您是非常困难的。但是.....您的第二次加入将survey_countries 与调查联系起来。我认为您的意思是将其加入调查类别。此外,您有一个 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 中加载模式和示例数据。这将使这个问题更容易解决。)

于 2013-10-08T00:16:13.457 回答