联表查询(基于双下划线的跨表查询)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# 查询出版社所有的书籍名字和出版社的名字
    #出版社查书 反向 多个
    # res = models.Publish.objects.filter(name='东方出版社').values('name','book__title')
    # print(res)
    # 所有书查出版社 正向 一个
    # res = models.Book.objects.filter().values('title','publish__name')
    # print(res)
    # 查书id为1的 出版社 正向 一个
    # res = models.Book.objects.filter(pk=1).values('title','publish__name')
    # print(res)
 
# 查询书籍主键是1的作者的手机号
    #正向  书籍查作者
    # res = models.Book.objects.filter(pk=1).values('authors__author_detail__phone')
    # print(res)
    #反向 作者查收书籍
    # res = models.Author.objects.filter(book__id=1).values('author_detail__phone','book__title')
    # print(res)
 
#查询辰东的书籍 和手机号
    #正向
    # res = models.Book.objects.filter(authors__name='辰东').values('title','authors__author_detail__phone')
    # print(res)
    #反向
    # res = models.Author.objects.filter(name='辰东').values('book__title','author_detail__phone')
    # print(res)
 
    # 查询辰东和唐家三少的书籍 和手机号
    #正向
    # res = models.Book.objects.filter(authors__name__in=['辰东','唐家三少']).values('title','authors__author_detail__phone')
    # print(res)
    #反向
    # res = models.Author.objects.filter(name__in=['辰东','唐家三少']).values('book__title','author_detail__phone')
    # print(res)
    #通过手机号来查询书籍 和作者的名字
    #反向
    # res = models.AuthorDetail.objects.filter(phone=111).values('author__name','author__book__title')
    # print(res)
 
    #通过书籍找到作者和作者的详请
    # res = models.Book.objects.filter(pk=1).values('authors__name','authors__author_detail__phone','authors__author_detail__addr')
    # print(res)
    #通过出版社找到书,作者,作者详情
    #出版社查书 反向
    # res = models.Publish.objects.filter(name='东方出版社').values('book__title','book__authors__name','book__authors__author_detail__addr')
    # print(res)
    #正向 书查出版社
 
    # 1.查询书籍主键为1的出版社
    # book_obj = models.Book.objects.filter(pk=1).first()
    # # 书查出版社 正向
    # res = book_obj.publish
    # print(res)
    # print(res.name)
    # print(res.addr)
    res = models.Book.objects.filter(title='遮天').first()  #是列表套的形式,必须得这样取
    book_title = res.title
    publish_name = res.publish.name
    aothor_name = res.authors.all().first().name
 
    print(book_title,publish_name,aothor_name)
 
    '''
    select * from app01_book where app01_book.id in
    (select book_id from app01_book_authors  where app01_book_authors.author_id=
    (select id from app01_author where app01_author.id =
    (select id from app01_authordetail where app01_authordetail.phone=111)))
 
     
    slect * from "app01_authordetail"
    inner join "app01_author" on ("app01_authordetail"."id" = "app01_author"."author_detail_id")
    inner join "app01_book_authors" on ("app01_author"."id" = "app01_book_authors"."author_id")
    inner join "app01_book" on ("app01_book_authors"."book_id" = "app01_book"."id") where "app01_authordetail"."phone" = 111
 
    '''
 
 
    '''
    这里就不需要在写all了,查到的数据都会显示出来
    正向查询和反向查询还是根据外键字段在谁那里来判断
    filter的过滤条件:通过什么查什么就过滤谁  通过出版社 找作者,作者的书,作者的详情  filter的就是出版社
        跨表操作直接__就可以跨到关联过字段的表上,然后就可以直接__name取字段
        哪怕是出版社只关联了作者,也还是可以通过作者__书找到书,他们之间有一条关联的线就可以随意跨
    '''

  

posted @   咖喱给给啊  阅读(17)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
点击右上角即可分享
微信分享提示