mysql - 让mysql查询更高效

标签 mysql sql database

所以此时我的初始查询如下所示:

SELECT 
    `surveyEntries`.`ID` AS EntryID,
    `surveyEntries`.`created` AS EntryDate,
    `hw_services`.`name` AS Provider, 
    `surveyQuestions`.`ID` AS QuestionID,
    `surveyQuestions`.`label` AS Question, 
    `survey_meta`.`answer` AS Answer,
    `surveyQuestions`.`parentID` AS ParentQuestion
FROM `survey` , `surveyQuestions` , `surveyEntries` , `survey_meta` , `hw_services`
WHERE `survey`.`ID` =2
    AND `survey`.`ID` = `surveyQuestions`.`surveyID`
    AND `survey`.`ID` = `surveyEntries`.`surveyID`
    AND `surveyEntries`.`ID` = `survey_meta`.`entryID`
    AND `hw_services`.`ID` = `surveyEntries`.`hw_serviceID`
    AND `surveyQuestions`.`ID` = `survey_meta`.`questionID` 

现在我已经阅读过,这是一个可以优化的非常弱的冗长查询。

有人知道我该怎么做吗?我的尝试未能提供以下相同的结果:

SELECT 
    `surveyEntries`.`ID` AS EntryID,
    `surveyEntries`.`created` AS EntryDate,
    `hw_services`.`name` AS Provider,
    `surveyQuestions`.`ID` AS QuestionID,
    `surveyQuestions`.`label` AS Question,
    `survey_meta`.`answer` AS Answer,
    `surveyQuestions`.`parentID` AS ParentQuestion
FROM `survey`
    JOIN `surveyQuestions` 
        ON `survey`.`ID` = `surveyQuestions`.`surveyID`
    JOIN `surveyEntries`
        ON `survey`.`ID` = `surveyEntries`.`surveyID`
    JOIN `survey_meta`
        ON `survey`.`ID` = `survey_meta`.`entryID`
    JOIN `hw_services` 
        ON `survey`.`ID` = `hw_services`.`ID`
WHERE `survey`.`ID` =2

编辑::

好吧,在看了你的评论后我明白了为什么,愚蠢的错误。

一些连接实际上是将两个表连接在一起,而不是将它们连接到 FROM 表(调查)。

这是我的新尝试,但失败了。

SELECT 
`surveyEntries`.`ID` AS EntryID,
`surveyEntries`.`created` AS EntryDate,
`hw_services`.`name` AS Provider,
`surveyQuestions`.`ID` AS QuestionID,
`surveyQuestions`.`label` AS Question,
`survey_meta`.`answer` AS Answer,
`surveyQuestions`.`parentID` AS ParentQuestion
FROM `survey`
JOIN `surveyQuestions` 
    ON `survey`.`ID` = `surveyQuestions`.`surveyID`

JOIN `surveyEntries`
    ON `survey`.`ID` = `surveyEntries`.`surveyID`

JOIN `survey_meta`
    ON `surveyEntries`.`surveyID` = `survey_meta`.`entryID`

JOIN `hw_services` 
    ON `hw_services`.`ID` = `surveyEntries `.`hw_serviceID`

JOIN `surveyQuestions` 
    ON `surveyQuestions`.`ID` = `survey_meta`.`questionID`

WHERE `survey`.`ID` =2 

我得到的错误是:不是唯一的表/别名:'surveyQuestions'

最佳答案

试试这个:

SELECT 
`surveyEntries`.`ID` AS EntryID,
`surveyEntries`.`created` AS EntryDate,
`hw_services`.`name` AS Provider,
`surveyQuestions`.`ID` AS QuestionID,
`surveyQuestions`.`label` AS Question,
`survey_meta`.`answer` AS Answer,
`surveyQuestions`.`parentID` AS ParentQuestion
FROM `survey`
JOIN `surveyQuestions` 
    ON `survey`.`ID` = `surveyQuestions`.`surveyID`
JOIN `surveyEntries`
    ON `survey`.`ID` = `surveyEntries`.`surveyID`
JOIN `survey_meta`
     ON (`surveyEntries`.`ID` = `survey_meta`.`entryID` AND `surveyQuestions`.`ID` = `survey_meta`.`questionID`)
JOIN `hw_services` 
    ON `surveyEntries`.`hw_serviceID` = `hw_services`.`ID`
WHERE `survey`.`ID` =2

关于mysql - 让mysql查询更高效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31263685/

相关文章:

mysql - MySQL 转储的完整数据库重置?

php - jQuery DataTables 是在单个请求中还是使用分页从数据库中获取所有数据?

mysql - 如何连续使用多个IN(数组)

php - 我希望我的子查询返回多个值(= 为每个成员),这可能吗?

mysql - SQL 仅在以下情况下插入

java - 每天更新两个数据库,使它们包含相同的有效数据集

mysql - 为什么 Python 子进程不能像预期的那样使用 named_pipe?

php - 存储购物车的临时数据

java - 调用 SQL 过程 : SQL exception - code: 6550 ORA-06550

php - 如何将我的数据库带回 wamp 服务器?