与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将至少给出其中一个主题的材料,但不一定都是这两个材料
答
您的问题是在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行/线表,你不能有两个不同的主题值在同一时间,除非你在主题表连接两次
非常感谢!我明白了我现在必须做的事情。 – jumm 2009-11-19 20:19:23