联表查询(基于双下划线的跨表查询)
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取字段 哪怕是出版社只关联了作者,也还是可以通过作者__书找到书,他们之间有一条关联的线就可以随意跨 ''' |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用