1

私は2つのテーブルを持っています。1 つはコンテンツ レコードを格納し、もう 1 つはコンテンツ レコード間の関係を格納します。

table "content"             table "relations"  
+---+-----+------+------+   +---------+----------+  
|id |num  |text  |value |   |id_local |id_foreign|  
+---+-----+------+------+   +---------+----------+  
|1  |111  |aaa   |12345 |   |2        |3         |  
+---+-----+------+------+   +---------+----------+  
|2  |222  |bbb   |23456 |   |2        |5         |  
+---+-----+------+------+   +---------+----------+  
|3  |333  |ccc   |34567 |   |4        |1         |  
+---+-----+------+------+   +---------+----------+  
|4  |444  |ddd   |45678 |   |2        |1         |  
+---+-----+------+------+   +---------+----------+  
|5  |555  |eee   |56789 |   |3        |6         |  
+---+-----+------+------+   +---------+----------+  
|6  |666  |fff   |67890 |   |4        |5         |  
+---+-----+------+------+   +---------+----------+  

テーブル「リレーション」の読み取り

id_local = コンテンツ内のレコードの ID (「親」)
id_foreign = id_local に関連するコンテンツ内のレコードの ID (「子」)

テーブル「関係」に入力された順序で content.num = 222 のすべての関係が必要です。結果は次のようになります。

result  
+-----+------+  
|num  |value |  
+-----+------+  
|333  |34567 |  
+-----+------+  
|555  |56789 |  
+-----+------+  
|111  |12345 |  
+-----+------+  

JOIN をいくつか試しましたが、この結果は得られませんでした。

この結果を得る方法を知っている人はいますか?

追加の質問:

すべての「子」レコードを含む「親」レコードの content.value=23456 を出力したい場合、クエリはどのようになりますか?

result 2
+-----+------+--------+  
|num  |value | p-value|  
+-----+------+--------+
|333  |34567 | 23456  |  
+-----+------+--------+  
|555  |56789 | 23456  |    
+-----+------+--------+  
|111  |12345 | 23456  |  
+-----+------+--------+  
4

3 に答える 3

1

私はそれが奇妙な方法だと思いますが;

SELECT num, value
FROM content
WHERE id IN (
  SELECT id_foreign
  FROM relations
  WHERE id_local = ( SELECT id FROM content WHERE num = '222' )
  )
  AND num = '222' -- Additional answer
于 2013-05-18T11:38:49.240 に答える
0

ここでは a が必要だとは思いませんjoin

必要なのは「親」レコードの ID だけです。この場合は2.

Select num, value from content where id in (select id_foreign where id_local=2)

ID がわからず、num値だけがわからない場合は...

Select num, value from content where id in (select id_foreign where id_local=(select id from content where num='222'))

于 2013-05-18T11:39:17.340 に答える