Mysql SQL语句显示来自3个表的数据
我想在一个查询中显示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 +-----------+--------+-----------------------------------
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”字段中继续显示空值或任何内容?好的。我很快就会尝试。非常感谢:)