鉴于以下表格:
labels tags_labels
|id |name | |url |labelid |
|-----|-------| |/a/b |1 |
|1 |punk | |/a/c |2 |
|2 |ska | |/a/b |3 |
|3 |stuff | |/a/z |4 |
artists tags
|id |name | |url |artistid |albumid |
|----|--------| |------|-----------|---------|
|1 |Foobar | |/a/b |1 |2637 |
|2 |Barfoo | |/a/z |2 |23 |
|3 |Spongebob| |/a/c |1 |32 |
我想获得一个符合几个条件的URL列表(可以由用户输入到使用这些语句的脚本中)。 例如,用户可能希望列出所有标签为“(1 OR 2)AND 3”的网址,但仅限于艺术家“Spongebob OR Whatever”。
是否可以使用inner / harry potter / cross / self JOIN在单个语句中执行此操作? 或者我是否必须在多个语句中传播查询并将结果缓存在我的脚本中?
编辑:
如果有可能,声明会是什么样子? :P
答案 0 :(得分:0)
是的,您可以在一个查询中执行此操作。也许一种有效的方法是根据用户输入的条件动态生成SQL语句。
答案 1 :(得分:0)
此查询允许您按标签名称或艺术家名称进行过滤。 动态构建sql以连接用户参数或 将所需的参数传递给存储过程显然会改变 where子句但这实际上取决于你的'脚本'必须有多动态......
SELECT tl.url
FROM labels l INNER JOIN tags_labels tl ON l.id = tl.labelid
WHERE l.name IN ('ska','stuff')
UNION (
SELECT t.url
FROM artists a INNER JOIN tags t ON a.id = t.artistid
WHERE a.name LIKE '%foo%'
)
祝你好运!