mariadb 两个表上的SQL子查询或JOIN,与一次删除的值匹配

zsohkypk  于 2022-11-08  发布在  其他
关注(0)|答案(2)|浏览(146)

请考虑以下表格:
基于id...

  • 比尔是约翰的老板
  • 汉克是安迪和亚历克斯的老板
    writers

| 标识符|姓名|凸毂标识|
| - -|- -|- -|
| 一个|若翰|2个|
| 2个|比尔|2个|
| 三个|安迪|四个|
| 四个|汉克|四个|
| 五个|亚历克斯|四个|
writerspapers他们写的...

papers

| 标识符|职称|编写器标识|
| - -|- -|- -|
| 一个|波斯顿|一个|
| 2个|芝加哥|四个|
| 三个|思科公司|三个|
| 四个|西雅图|2个|
| 五个|北部地区|五个|
我需要一个SQL查询,它可以返回Hank(id = 4 ==〉boss_id = 4)的writers所写的每一篇论文的papers.*,这恰好包括Hank本人,因为他注册为自己的老板,但这并不重要。
所需输出:
| 标识符|职称|编写器标识|
| - -|- -|- -|
| 2个|芝加哥|四个|
| 三个|思科公司|三个|
| 五个|北部地区|五个|
我有什么,没有工作的希望:

SELECT * FROM papers p WHERE ( writers w AS p.writer_id JOIN w.boss_id = 4 );
kupeojn6

kupeojn61#

你在解决问题的正确轨道上。在这里我分享两种方法:一种是通过使用子查询,另一种是通过连接两个表。
架构和插入语句:

create table writers( id int, name varchar(200), boss_id int);
  insert into writers values( 1,'John',2);
  insert into writers values( 2,'Bill',2);
  insert into writers values( 3,'Andy',4);
  insert into writers values( 4,'Hank',4);
  insert into writers values( 5,'Alex',4);

  create table papers ( id int, title varchar(200),writer_id int);

  insert into papers values( 1,'Boston',1);
  insert into papers values( 2,'Chicago',4);
  insert into papers values( 3,'Cisco' ,3);
  insert into papers values( 4,'Seattle',2);
  insert into papers values( 5,'North' ,5);

查询1(使用子查询):

SELECT * FROM papers p WHERE writer_id in ( select id from writers where boss_id = 4 );

输出量:
| 标识符|职称|编写器标识|
| - -|- -|- -|
| 2个|芝加哥|四个|
| 三个|思科公司|三个|
| 五个|北部地区|五个|
查询2(使用联接):

select p.* from papers p 
                  inner join writers w on p.writer_id=w.id
  where w.boss_id=4

输出量:
| 标识符|职称|编写器标识|
| - -|- -|- -|
| 三个|思科公司|三个|
| 2个|芝加哥|四个|
| 五个|北部地区|五个|

  • db〈〉小提琴
piwo6bdm

piwo6bdm2#

您可以使用writers表主键和papers表外键将这两个表连接在一起,然后在where子句中指定boss_id。

SElECT p.* 
FROM papers p
INNER JOIN writers w ON p.writer_id = w.id
WHERE w.boss_id = 4

相关问题