1

トピックタイプを保持するテーブルと、マテリアルを保持するテーブルがあります。次に、各テーブルのキーを保持する別のテーブルがあり、多対多の関係が作成されます。

ただし、トピックを検索して同じ資料を共有している2つのトピックを選択しようとすると、機能しません。

表の例:

材料表:

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がエラー申し訳ありませんであることを知っています。トピックが関連付けられている資料を出力するにはどうすればよいかということです。

4

3 に答える 3

7

あなたの問題はwhere節にあります:

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

topic.topicを同時に「デザイン」と「メモ」の両方にすることはできません。

ANDをORにするつもりでしたか?

于 2009-11-19T19:58:40.273 に答える
3

2つの異なるトピックを取得するには、2回参加する必要があります。(つまり、Sonny Boyは問題の中で正しいですが、ORは正しい答えではありません)

のようなもの(私はテーブルを持っていないのでSQLをテストしていないことに注意してください)

メモを編集:申し訳ありませんが、マットトップが2つあるオリジナルは正しいと思います。これには、マットトップが1つしかないバージョンがあったため、オリジナルに戻しました。

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は、トピックの少なくとも1つに資料を提供しますが、必ずしも両方に提供するわけではありません

于 2009-11-19T20:08:22.907 に答える
1

私があなたを正しく理解していれば、同じ資料を共有するトピックが必要です。

これを行う方法は次のとおりです。

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行/行であるかのようにテーブルを結合するため、トピックテーブルに2回結合しない限り、2つの異なるトピック値を同時に持つことはできません。

于 2009-11-19T20:09:22.517 に答える