繁体   English   中英

具有INNER JOIN的SQL语句

[英]SQL Statement with INNER JOIN

有人可以帮我这个说法吗? 我有三个表, trackstags和数据透视表tag_track

tags包含音乐类别和对音乐节奏的约束(以每分钟节拍数(bpm)为单位)。 tracks包含所有带有标题,艺术家等字段的轨道。 tag_tracktag_idtrack_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_idC.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM