与SQL查询问题

问题描述:

我有一个表,其中包含主题类型另一个持有材料。然后我有另一个表格,它保存着每个表格的关键字,从而创建了多对多的关系。与SQL查询问题

但是,当我尝试搜索主题以挑选出共享相同材质的两个主题时,该功能无效。

示例表:

材质表:

MatID | Name 
--------------- 
1  | book1 
2  | note23 

主题表:

TID | topic 
--------------- 
1 | computer 
2 | database 

MatTop表:

TID | MatID 
------------ 
1 | 2 
2 | 2 

这是我的查询:

SELECT * FROM material 
INNER JOIN mattop ON material.MatID = mattop.MatID 
INNER JOIN topic ON mattop.TID = topic.TID 
WHERE (topic.topic = 'computer') AND (topic.topic = 'database') 

感谢您的任何帮助。

编辑 - 我知道AND是错误的遗憾。我的意思是如何让它输出具有相关主题的材料。

要获得两个不同的主题,需要加入两次。 (所以桑尼男孩是在正确的问题是where子句,但或者不是正确答案)

喜欢的东西(注意我没有表,因此没有测试SQL)

编辑注:对不起,我想用2个mattops原来是正确的有这样一个版本只有一个,所以我已经恢复到原来的

SELECT * FROM material 
    INNER JOIN mattop mattop1 ON material.MatID = mattop1.MatID 
    INNER JOIN topic topic11 ON mattop.TID = topic1.TID 

    INNER JOIN mattop mattop2 ON material.MatID = mattop2.MatID 
    INNER JOIN topic topic2 ON mattop.TID = topic2.TID 


    WHERE (topic1.topic = 'computer') AND (topic2.topic = 'database') 

这应该给计算机和数据库的这两个主题所用的材料。 Where子句中的一个简单OR将至少给出其中一个主题的材料,但不一定都是这两个材料

+0

非常感谢!我明白了我现在必须做的事情。 – jumm 2009-11-19 20:19:23

您的问题是在where子句中:

WHERE (topic.topic = 'Design') AND (topic.topic = 'Notes') 

topic.topic不能既是“设计”,并在同一时间的“注意”。

你的意思是让你的AND成为OR?

如果我正确理解了您,您希望共享相同材质的主题。

这里是你如何做到这一点:

SELECT t1.*,t2.* FROM topic t1 
JOIN mattop mt1 ON t1.TID = mt.TID 
JOIN mattop mt2 ON mt2.MatID = mt1.MatID 
JOIN topic t2 ON t2.TID = mt2.TID 
WHERE t2.TID <> t1.TID 

这将产生对共享相同材料的主题列表。

,因为SQL连接在一起,好像他们是1行/线表,你不能有两个不同的主题值在同一时间,除非你在主题表连接两次