Mysql

查詢連接時,另一個列表中的至少一個列表成員

  • October 13, 2015

假設 MySQL 數據庫中的佈局如下

Activity (id,etc) [id is primary key]
AcitivityMapper (activityID, targetYearID)  [composite key]
Years (targetYearID, targetYearName) [id primary key, name is unique]

我想,給定一個“年份名稱”列表,找到可以映射到至少一個年份名稱的活動

額外說明:使用上面的佈局,一個activity可以映射到多個年份

例子:

  • 活動 (1, bla1)
  • 年份 (1, year1)
  • 年份 (2, year2)
  • 年 (3, year3)
  • 映射器(1, 1)
  • 映射器 (1, 2)

如果給定一個包含“year1”或“year2”的列表,我想獲得活動 1

我將如何使用 SQL 查詢來做到這一點?

額外說明:

我在春天的java中使用hibernate。我擁有的對像如下:

我的對像如下:

@Entity @Table(name="Activity")
class Activity {
@Id @Column(name="id") private Integer id;
@ManyToMany @JoinTable(name="ActivityMapper",joinColumns={@JoinColumn(name="id")},inverseJoinColumns{@JoinColumn(name="targetYearID")}) private List<TargetYear> targetYears = new ArrayList<>();
}

@Entity @Table(name="Years")
class TargetYear {
@Id @Column(name="targetYearID") private Integer id;
@Column(name="targetYearName") private String name;
}
SELECT DISTINCT
  a.id,
  a.etc
FROM years y
JOIN activitymapper am
  ON (y.targetyearid = am.targetyearid)
JOIN activity a
  ON (a.id = am.activityid)
WHERE y.targetyearname IN ('Year1', 'Year2')

應該這樣做。我們從yearsactivity通過activitymapper,每個活動只選擇一次 ( DISTINCT)。

引用自:https://dba.stackexchange.com/questions/83678