mysql - 从不同的表中选择

标签 mysql

我有 table

user_task(_id,email,task_id)

表格

users(_id int, email varchar(50))

表格

tasks(_id,name)

和表

subtask(_id,name, task_id)

我需要两个选择语句

  1. 通过电子邮件选择特定用户的所有任务
  2. 选择该用户的子任务

没有 sql-join 方面的经验。所以我需要一些帮助。提前致谢

我认为这条语句将完成第一个语句的工作,但我不确定

SELECT * FROM tasks WHERE _id=
(SELECT task_id FROM user_tasks WHERE email='$email')

最佳答案

选择您需要加入user_taskstasks 的特定电子邮件ID 的所有任务

select
ut._id,
ut.email,
ut.task_id,
t.name
from user_task ut
join tasks t on t._id = ut.task_id
where ut.email = 'some email id'

选择与您需要加入所有表的用户相关的子任务作为

select  
ut._id ,
ut.email,
ut.task_id,
t.name as task_name,
st._id as sub_task_id,
st.name as sub_task_name
from subtask st
join tasks t on t._id = st.task_id
join user_task ut on ut.task_id = t._id
where ut.email = 'some email id'

UPDATE 问题更新后,我看到有 user 表并且您正在将 emailid 存储到 user_task ,我建议存储表 user_task 中的 userid,这样如果用户更改电子邮件 id,它不会对相关表造成任何问题,您只需要将 user 表加入到 user_tasks 表使用 id。

因此,如果您将 user_id 存储在 user_task 表中而不是 email 中,查询将看起来像

select
u.id as user_id,
u.email,
ut.task_id,
t.name
from user_task ut
join user u on u._id = ut.user_id
join tasks t on t._id = ut.task_id
where u.email = 'some email id'

select  
u._id as user_id,
u.email,
ut.task_id,
t.name as task_name,
st._id as sub_task_id,
st.name as sub_task_name
from subtask st
join tasks t on t._id = st.task_id
join user_task ut on ut.task_id = t._id
join user u on u._id = ut.user_id
where u.email = 'some email id'

关于mysql - 从不同的表中选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24568520/

相关文章:

MySQL错误信息截断

mysql - 将两个临时表合并为一个表,但保留所有列名

MySQL LIKE,额外通配符对性能的影响

php - 将 MYSQL 数据库连接到 Public_HTML PHP

mysql - 查找数据库条目相对于 Rails 3 中 mysql 数据库中字段的顺序或排名

MySQL查询-多个JOIN

javascript - 我可以让 Google Drive 电子表格像 MySQL 数据库一样工作吗?

mysql - 注释/记录 .sql 文件的约定

PHP 检查事件是否已经开始

mysql - 在 Debian Stretch 中重新安装 MySQL (mariadb)