Mysql SQL语句显示来自3个表的数据

Mysql SQL语句显示来自3个表的数据,mysql,sql,database,Mysql,Sql,Database,我想在一个查询中显示3个表, 这是这些表的结构 1. tbl_user +-----------+------ userId | name +-----------+------ uid1 | jorge uid2 | kaka uid3 | victor uid4 | james 2. tbl_question +-----------+--------+-----------------------------------

我想在一个查询中显示3个表, 这是这些表的结构

1. tbl_user
+-----------+------
   userId   | name 
+-----------+------
 uid1       | jorge
 uid2       | kaka
 uid3       | victor
 uid4       | james

2. tbl_question
+-----------+--------+------------------------------------+--------------
 questionId | userId | question                           | answer_count
+-----------+--------+------------------------------------+--------------
 qid1       | uid2   | what do you think about elephant?  | 3
 qid2       | uid2   | what do you think about cat?       | 1
 qid3       | uid2   | what do you think about shark ?    | 0
 qid4       | udi3   | what do you think about snake ?    | 1

3. tbl_answer
+-----------+--------+------------------------------------+--------------
 questionId | userId | answer
+-----------+--------+------------------------------------+--------------
 qid1       | uid4   | it's have a big body
 qid1       | uid2   | it's have a long nose
 qid1       | uid1   | it's have 4feet
 qid2       | uid3   | it's a cute animal
 qid4       | uid2   | it's have a poison
我想用指定的userid显示所有表中的数据,只要我使用下面的SQL语句

select tbl_user.userId,name,question,answer_count,tbl_answer.userId,answer from tbl_question INNER JOIN tbl_user ON tbl_question.userId=tbl_user.userId LEFT JOIN tbl_answer ON tbl_answer.questionId=tbl_question.questionId WHERE tb_question.userId='uid2';
结果如下:

userId | name   | questionId | question                             | answer_count | tbl_answer.userId | answer 
-------+--------+---------------------------------------------------+--------------+-------------------+---------------------
 uid2  | kaka   |    qid1    | what do you think about elephant ?   |  3           |      uid4         | it's have a big body
 uid2  | kaka   |    qid1    | what do you think about elephant ?   |  3           |      uid2         | it's have a long nose
 uid2  | kaka   |    qid1    | what do you think about elephant ?   |  3           |      uid1         | it's have 4feet
 uid2  | kaka   |    qid2    | what do you think about cat   ?      |  1           |      uid3         | it's a cute animal
 uid2  | kaka   |    qid3    | what do you think about shark ?      |  0           |      null         | null
上面的结果显示了userid为'uid2'的所有数据,但我希望得到以下结果:

tbl\u答案。userId='uid2'
如果
tbl\u answer.userId
null
tbl\u answer.userId'uid2'
如下所示:

userId | name   | questionId | question                             | answer_count | tbl_answer.userId | answer 
-------+--------+--------------------------------------+--------------+-------------------+---------------------
 uid2  | kaka   |    qid1    | what do you think about elephant ?   |  3           |      uid2         | it's have a long nose
 uid2  | kaka   |    qid2    | what do you think about cat   ?      |  1           |      uid3         | it's a cute animal
 uid2  | kaka   |    qid3    | what do you think about shark ?      |  0           |      null         | null

如何实现这一点?

添加到
WHERE
子句中:

WHERE <...> AND (tbl_answer.userId = 'uid2' OR tbl_answer.userId IS NULL)
WHERE AND(tbl_answer.userId='uid2'或tbl_answer.userId为空)

添加到
WHERE
子句中:

WHERE <...> AND (tbl_answer.userId = 'uid2' OR tbl_answer.userId IS NULL)
WHERE AND(tbl_answer.userId='uid2'或tbl_answer.userId为空)

这是一个可以解决您的问题的查询:

select tbl_user.userId,name,question,answer_count,tbl_answer.userId,answer 
from tbl_question 
INNER JOIN tbl_user ON tbl_question.userId=tbl_user.userId 
LEFT JOIN tbl_answer ON tbl_answer.questionId=tbl_question.questionId 
WHERE tbl_question.userId='uid2'
AND (tbl_answer.userId = 'uid2' 
     OR 
     tbl_answer.userId IS NULL 
     OR     
     (select count(questionId) from tbl_answer a where a.questionId=tbl_question.questionId and a.userId = 'uid2') = 0
     AND
     tbl_answer.userId = (select min(userId) from tbl_answer a where a.questionId=tbl_question.questionId)
)
它返回
user2
提出的所有问题
如果
user2
是回答者之一,则只返回他的答案。
如果没有答案,则返回null。

如果只有
user2
以外的其他用户提供的答案,则返回具有miimal id的用户的答案

这是一个可以解决您的问题的查询:

select tbl_user.userId,name,question,answer_count,tbl_answer.userId,answer 
from tbl_question 
INNER JOIN tbl_user ON tbl_question.userId=tbl_user.userId 
LEFT JOIN tbl_answer ON tbl_answer.questionId=tbl_question.questionId 
WHERE tbl_question.userId='uid2'
AND (tbl_answer.userId = 'uid2' 
     OR 
     tbl_answer.userId IS NULL 
     OR     
     (select count(questionId) from tbl_answer a where a.questionId=tbl_question.questionId and a.userId = 'uid2') = 0
     AND
     tbl_answer.userId = (select min(userId) from tbl_answer a where a.questionId=tbl_question.questionId)
)
它返回
user2
提出的所有问题
如果
user2
是回答者之一,则只返回他的答案。
如果没有答案,则返回null。

如果只有
user2
以外的其他用户提供的答案,则返回具有miimal id的用户的答案

哦..就这样..像个魔术师一样跑。。他信,我撤消接受。。我使用上面的sql语句可以正常运行,但当tbl_answer.id_a不是“uid2”且not null sql语句不能正常工作时,请参见editow..就是这样..像符咒一样运行。。他信,我撤消接受。。我使用上面的sql语句可以正常运行,但当tbl_answer.id_a不是“uid2”且NOTNULL sql语句不能正常工作时,请参见editOne案例仍未涵盖。如果有
user2
提出的问题有多个答案,但没有一个答案来自
user2
,该怎么办。那么应该返回什么作为答案呢?我刚刚尝试了mysql的案例,没有数据显示,我该如何处理?我想在“tbl_answer.userId”字段中继续显示空值或任何内容?好的。我很快就会尝试。非常感谢:)有一个案件仍未涵盖。如果有
user2
提出的问题有多个答案,但没有一个答案来自
user2
,该怎么办。那么应该返回什么作为答案呢?我刚刚尝试了mysql的案例,没有数据显示,我该如何处理?我想在“tbl_answer.userId”字段中继续显示空值或任何内容?好的。我很快就会尝试。非常感谢:)