如何select独一无二?

How to select unique?

我正在处理现场音乐数据库,但我想不出如何进行查询以获取正在举办活动的艺术家。

我有两个表:artist(包含 ID、名称、描述等)和 event_artist(多对多关系)具有 artist_idevent_id列。

return knex('event_artist')
  .distinct('artist_id')
  .join('artist', 'event_artist.artist_id', 'artist.id')
  .select('*')
  .offset(offset)
  .limit(howMany)

这个 returns 重复的 ID,我不想要。我该如何解决这个问题?

这应该留给 join 而不仅仅是 Join-

return knex('event_artist')
  .leftJoin('artist', 'event_artist.artist_id', 'artist.id')
  .offset(offset)
  .limit(howMany)

您正在寻找一个查询,该查询选择在 event_artist 列中有行的艺术家行。

在SQL中可以写成exists

select
  *
from
  artists as a
where
  exists (
    select
      *
    from
      event_artist as ea
    where
      ea.artist_id = a.id
  )

knex中可以写成

knex('artists as a')
  .whereExists(
    knex
      .select('*')
      .from('event_artists as ea')
      .whereRaw('ea.artist_id = a.id')
  )