首页 > 试题广场 >

找到每个人的任务

[编程题]找到每个人的任务
  • 热度指数:103950 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
有一个person表,主键是id,如下:
id name
1
2
fh
tm
有一个任务(task)表如下,主键也是id,如下:
id person_id content
1
2
2
2
tm1 works well
tm2 works well
请你找到每个人的任务情况,并且输出出来,没有任务的也要输出,而且输出结果按照person的id升序排序,输出情况如下:

id name content
1
2
2
fh
tm
tm
NULL
tm1 works well
tm2 works well

示例1

输入

drop table if exists person;
drop table if exists task;
CREATE TABLE `person` (
`id` int(4) NOT NULL,
`name` varchar(32) NOT NULL,
PRIMARY KEY (`id`));

CREATE TABLE `task` (
`id` int(4) NOT NULL,
`person_id` int(4) NOT NULL,
`content` varchar(32) NOT NULL,
PRIMARY KEY (`id`));

INSERT INTO person VALUES
(1,'fh'),
(2,'tm');

INSERT INTO task VALUES
(1,2,'tm works well'),
(2,2,'tm works well');

输出

id|name|content
1|fh|None
2|tm|tm works well
2|tm|tm works well
其实用左连接或者右连接都可以
重点就是要分清楚哪个表作为主表
person表是作为主表的
所以用右连接的话就是
SELECT
    person.id,
    NAME,
    content 
FROM
    task t1
    RIGHT JOIN person ON t1.person_id = person.id 
ORDER BY
    person.id

发表于 2024-09-03 11:47:28 回复(0)
-- 没有任务也要输出,左连接
select
    p.id,p.name,t.content
from person p left join task t
on p.id=t.person_id
order by p.id;
发表于 2024-06-04 19:23:33 回复(0)
select a.id,a.name,b.content from person a
left join task b
on a.id=b.person_id
order by a.id;

发表于 2024-02-05 13:52:28 回复(0)
select person.id,person.name,task.content
from person
left join task 
on person.id = task.person_id
order by person.id;
发表于 2024-01-22 00:38:57 回复(0)
select
    p.id
    ,p.name
    ,t.content
from 
    person p
left join
    task t
on 
    p.id = t.person_id
order by
    p.id
关联条件还有另外一种写法,怎么都想不起来了
发表于 2023-05-25 14:54:30 回复(0)
select p.id,p.name,t.content
from person p left join task t
on p.id = t.person_id;

发表于 2022-12-29 15:06:14 回复(0)
select a.id, a.name, (case when b.person_id = '' then 'NULL' else b.content end) as content
from person as a 
left join task as b 
on a.id = b.person_id
order by a.id
;

发表于 2022-07-15 09:22:30 回复(0)
select
  person.id,
  person.name,
  task.content
from
  person
  left join task on person.id = task.person_id

发表于 2022-06-23 22:52:05 回复(0)
select p.id,name,content from person p
left join task t
on p.id=t.person_id
order by p.id
发表于 2022-06-12 16:27:09 回复(0)
select p.id,p.name,t.content
from person p left join task t on p.id = t.person_id
order by p.id;
发表于 2022-06-09 16:39:12 回复(0)
select s1.id, s1.name, s2.content from person s1 left join task s2 on s1.id = s2.person_id;
题目描述不清楚
发表于 2022-06-04 20:15:56 回复(0)
select p.id, p.name, t.content
from person p left join task t on p.id = t.person_id

内连接 inner join : 查询两个表中的结果集中的交集
外连接 outer join
   左外连接 left join
       (以左表作为基准,右边表来一一匹配,匹配不上的,返回左表的记录,右表以NULL填充)
   右外连接 right join
       (以右表作为基准,左边表来一一匹配,匹配不上的,返回右表的记录,左表以NULL填充)


发表于 2022-05-25 07:30:41 回复(0)
select a.id,a.name,b.content from person a left join task b on a.id = b.person_id order by id
发表于 2022-05-20 21:03:30 回复(0)
select a.*,content
from person a left join task b on a.id= b.person_id

发表于 2022-04-18 14:57:47 回复(0)
select a.id, a.name, b.content
from person a
left join task b on a.id = b.person_id
order by id
发表于 2022-04-17 21:38:33 回复(0)
SELECT p.id,p.name,t.content
FROM person p left join task t ON p.id=t.person_id
ORDER BY p.id

发表于 2022-04-07 14:22:04 回复(0)
SELECT
    a.id,
    a.name,
    b.content
FROM
    `person` a
LEFT JOIN task b ON a.id = b.person_id

order by id asc 
发表于 2022-03-25 11:01:39 回复(0)

问题信息

SQL
难度:
60条回答 3119浏览

热门推荐

通过挑战的用户

查看代码
找到每个人的任务