© 2026 Hedgehog Software, LLC

TwitterGitHubDiscord
More
CommunitiesDocsAboutTermsPrivacy
Search
Star
Setup for Free
Drizzle TeamDT
Drizzle Team•2y ago•
1 reply
harshcut

Help needed for Nested Query

For this example, I have 4 tables -
user
user
,
podcast
podcast
,
episodes
episodes
, and
bookmarks
bookmarks
.
- bookmarks table has two columns -
userId
userId
and
episodeId
episodeId

- each podcast can have multiple
episodeId
episodeId
s, each episode can have only one
podcastId
podcastId
(one to many)
- each user can bookmark multiple
episodeId
episodeId
s, each episode can be bookmarked by multiple
userId
userId
s (many to many)

I want to get all the
episodeId
episodeId
s when
userId
userId
and
podcastId
podcastId
is provided from the bookmarks table.

export const bookmarks = mysqlTable('bookmarks', {
    userId: varchar('userId', { length: 255 }).references(() => user.id),
    episodeId: varchar('episodeId', { length: 50 }).references(() => episodes.id),
  }, (b) => ({
    compoundKey: primaryKey({ columns: [b.userId, b.episodeId] }),
}))
export const podcast = mysqlTable('podcast', {
  id: varchar('id', { length: 32 }).primaryKey(),
  title: varchar('title', { length: 250 }).notNull(),
})
export const episodes = mysqlTable('episodes', {
  id: varchar('id', { length: 50 }).primaryKey(),
  title: varchar('title', { length: 250 }).notNull(),
  podcastId: varchar('podcastId', { length: 32 }).notNull().references(() => podcast.id),
})
export const user = mysqlTable('user', {
  id: varchar('id', { length: 255 }).primaryKey().$defaultFn(() => randomUUID()),
  name: varchar('name', { length: 255 }),
})

export const bookmarksRelations = relations(bookmarks, ({ one }) => ({
  user: one(user, {
    fields: [bookmarks.userId],
    references: [user.id],
  }),
  episode: one(episodes, {
    fields: [bookmarks.episodeId],
    references: [episodes.id],
  }),
}))
export const podcastRelations = relations(podcast, ({ many }) => ({
  episodes: many(episodes),
}))
export const episodesRelations = relations(episodes, ({ one, many }) => ({
  podcast: one(podcast, {
    fields: [episodes.podcastId],
    references: [podcast.id],
  }),
  bookmarks: many(bookmarks),
}))
export const bookmarks = mysqlTable('bookmarks', {
    userId: varchar('userId', { length: 255 }).references(() => user.id),
    episodeId: varchar('episodeId', { length: 50 }).references(() => episodes.id),
  }, (b) => ({
    compoundKey: primaryKey({ columns: [b.userId, b.episodeId] }),
}))
export const podcast = mysqlTable('podcast', {
  id: varchar('id', { length: 32 }).primaryKey(),
  title: varchar('title', { length: 250 }).notNull(),
})
export const episodes = mysqlTable('episodes', {
  id: varchar('id', { length: 50 }).primaryKey(),
  title: varchar('title', { length: 250 }).notNull(),
  podcastId: varchar('podcastId', { length: 32 }).notNull().references(() => podcast.id),
})
export const user = mysqlTable('user', {
  id: varchar('id', { length: 255 }).primaryKey().$defaultFn(() => randomUUID()),
  name: varchar('name', { length: 255 }),
})

export const bookmarksRelations = relations(bookmarks, ({ one }) => ({
  user: one(user, {
    fields: [bookmarks.userId],
    references: [user.id],
  }),
  episode: one(episodes, {
    fields: [bookmarks.episodeId],
    references: [episodes.id],
  }),
}))
export const podcastRelations = relations(podcast, ({ many }) => ({
  episodes: many(episodes),
}))
export const episodesRelations = relations(episodes, ({ one, many }) => ({
  podcast: one(podcast, {
    fields: [episodes.podcastId],
    references: [podcast.id],
  }),
  bookmarks: many(bookmarks),
}))
Drizzle TeamJoin
The official Discord for all Drizzle related projects, such as Drizzle ORM, Drizzle Kit, Drizzle Studio and more!
11,879Members
Resources
Was this page helpful?

Similar Threads

Recent Announcements

Similar Threads

Help with nested query
Drizzle TeamDTDrizzle Team / help
2y ago
nested query
Drizzle TeamDTDrizzle Team / help
3y ago
Query based on nested relation
Drizzle TeamDTDrizzle Team / help
2y ago
DEEPLY NESTED QUERY using { with }
Drizzle TeamDTDrizzle Team / help
2y ago