Mysql SQL查询性能和联接表
我正在努力为我的问答网站获取最佳查询。作为一个简化示例,我有3个表(问题、答案和用户): 表格用户Mysql SQL查询性能和联接表,mysql,sql,Mysql,Sql,我正在努力为我的问答网站获取最佳查询。作为一个简化示例,我有3个表(问题、答案和用户): 表格用户 UserID FirstName 1 John 2 Jack 3 Ana 4 Mary QuestionID fkUserID Title 1 4 What is...? 2 2 Where is...? 3 1 How to...? 4
UserID FirstName
1 John
2 Jack
3 Ana
4 Mary
QuestionID fkUserID Title
1 4 What is...?
2 2 Where is...?
3 1 How to...?
4 3 How much...?
AnswerID fkQuestionID fkUserID Answer
1 1 3 It is...
2 2 1 It is located in ZZ...
3 2 4 It is located in YY...
4 3 2 You have to...
表格_问题
UserID FirstName
1 John
2 Jack
3 Ana
4 Mary
QuestionID fkUserID Title
1 4 What is...?
2 2 Where is...?
3 1 How to...?
4 3 How much...?
AnswerID fkQuestionID fkUserID Answer
1 1 3 It is...
2 2 1 It is located in ZZ...
3 2 4 It is located in YY...
4 3 2 You have to...
表_答案
UserID FirstName
1 John
2 Jack
3 Ana
4 Mary
QuestionID fkUserID Title
1 4 What is...?
2 2 Where is...?
3 1 How to...?
4 3 How much...?
AnswerID fkQuestionID fkUserID Answer
1 1 3 It is...
2 2 1 It is located in ZZ...
3 2 4 It is located in YY...
4 3 2 You have to...
我正在创建新闻源以:
SELECT
DISTINCT (A.fkQuestionID) as QuestionID,
Q.Title,
A.AnswerID as AnswerID,
A.Answer,
U1.FirstName as AnswerFirstName,
Q.pkQuestionID,
U2.FirstName as QuestionFirstName
FROM table_answers as A
INNER JOIN table_questions as Q ON Q.QuestionID=A.fkQuestionID
INNER JOIN table_users as U1 ON U1.UserID=A.fkUserID
INNER JOIN table_users as U2 ON U2.UserID=Q.fkUserID
ORDER BY A.AnswerID DESC
我想返回预期结果,如下所示:
QuestionID AnswerID AnswerFirstName QuestionFirstName
3 4 Jack John
2 3 Mary Jack
1 1 Ana Mary
欢迎任何帮助。提前谢谢 请像这样试试
SELECT QuestionID ,fkUserID,title,ANS.Answer
FROM table_questions QST
INNER JOIN (SELECT fkQuestionID,MAX(AnswerID) AnswerID
FROM table_answers
GROUP BY fkQuestionID) ANS ON ANS.fkQuestionID = QST.QuestionID
INNER JOIN table_answers LANS ON LANS.AnswerID = ANS.AnswerID
您可以按
fkQuestionID
分组以获得max(AnswerID)
,然后像这样在进一步的join
中使用它
SELECT
q.QuestionID,
q.Title,
a1.AnswerID as AnswerID,
a1.Answer,
U1.FirstName as AnswerFirstName,
q.pkQuestionID,
U2.FirstName as QuestionFirstName
FROM
(SELECT MAX(AnswerID) as AnswerID,fkQuestionID FROM table_answers GROUP BY fkQuestionID ) as a2
INNER JOIN table_answers a1 ON a1.fkQuestionID = a2.fkQuestionID AND a1.AnswerID = a2.AnswerID
INNER JOIN table_questions q ON q.QuestionID = a2.fkQuestionID
INNER JOIN table_users as U1 ON U1.UserID=a1.fkUserID
INNER JOIN table_users as U2 ON U2.UserID=q.fkUserID
ORDER BY a2.AnswerID DESC
您可以在子查询中使用
MAX
,并执行JOIN
s以获取所需的列:
如果您希望包含没有答案的问题,请将
内部连接
替换为左连接
。SQL Server或MySQL?@FelixPamittan这是MySQLtks的一大特色!是否可以创建一个查询,以便也包括没有答案的问题,并按所有最近的活动对所有内容进行排序?group by
查询将是left-outer-join
,以及table\u-answers
。由于没有共同的时间,我不确定我们如何定义一个最近的问题或一个不同问题的答案是否是最近的,因为不同表中的ID不同,并且任何一个表中都没有日期!如果两个表(表_问题和表_答案)都有一个时间戳列怎么办?您可以按顺序使用magest(q.timestamp,a.timestamp)DESC