Mysql
查詢連接時,另一個列表中的至少一個列表成員
假設 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')
應該這樣做。我們從
years
到activity
通過activitymapper
,每個活動只選擇一次 (DISTINCT
)。