2010-07-30 17 views
0

鉴于下表多个条件:complex'ish SQL连接与所有表

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”的所有网址,但前提是这些网址是由艺术家“海绵宝宝或任意”制作的。

是否可以在使用inner/harry potter/cross/self JOIN的单个语句中执行此操作? 或者我是否必须将查询分散到多个语句中并在脚本中缓存结果?

编辑:
如果可能的话,这个陈述看起来是什么样的? :p

+1

哈利波特? – 2010-07-30 22:45:53

回答

0

是的,您可以在一个查询中执行此操作。也许一种有效的方法是根据用户输入的条件动态生成SQL语句。

+0

我的不好;应该提到,我也在寻找一个查询来统治他们;) – user407159 2010-07-30 22:51:43

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%' 
) 

祝你好运!

+0

嗯,谢谢,但那不是我正在寻找的答案。 最重要的是,它没有解决创建允许与标签ID相关的列表的问题。 在原始表格中,没有单个条目和两个标签... – user407159 2010-07-31 09:33:19

+0

对不起,意思是tags_labels没有包含2个标签ID的行。 – user407159 2010-07-31 09:43:35

+0

我不明白“创建一个允许和标签ID匹配的列表”。你在说什么? – Tahbaza 2010-07-31 13:56:58