[英]SQL Statement with INNER JOIN
有人可以帮我这个说法吗? 我有三个表, tracks
, tags
和数据透视表tag_track
。
tags
包含音乐类别和对音乐节奏的约束(以每分钟节拍数(bpm)为单位)。 tracks
包含所有带有标题,艺术家等字段的轨道。 tag_track
是tag_id
和track_id
的枢轴。
在这次发言中,我想抓住的所有列tracks
具有在一个记录表tag_track
-表的某一类。 F.ex. id=1
音乐用于跑步。 然后,我想在相应的bpm范围内获取所有要运行的轨道。
所以我写查询:
SELECT * FROM tracks A
INNER JOIN tag_track B ON A.id=B.track_id AND B.tag_id=1
INNER JOIN tags C ON A.bpm >= C.bpm_min AND A.bpm <= C.bpm_max
ORDER BY A.bpm ASC
可以正常运行, id=1
。 但是,一旦我更改为id=2
,由于某种原因,运行的bpm约束( id=1
)仍然有效,因此不会返回任何轨道。
所以问题出在第三行,
INNER JOIN tags C ON A.bpm >= C.bpm_min AND A.bpm <= C.bpm_max
如何使此行接受正确的B.tag_id
或C.id
的bpm约束?
如果B.tag_id
应该等于C.id
,那么可以将其包含在C.id
,如下所示:
SELECT A.*
FROM tracks A
INNER JOIN tag_track B ON A.id=B.track_id AND B.tag_id=1
INNER JOIN tags C ON A.bpm >= C.bpm_min AND A.bpm <= C.bpm_max AND B.tag_id = C.id
ORDER BY A.bpm ASC;
修复了另一种方式...
SELECT * FROM tracks A
INNER JOIN tag_track B ON A.id=B.track_id AND B.tag_id=1
WHERE A.bpm > (insert bpm min here) AND A.bpm < (insert bpm max here)
ORDER BY A.bpm ASC
这很完美。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.