0

一部のジョブと一部のワーカーの間に多対多の関係があります。
各ワーカーには年齢のようなプロパティがあります。22 歳の労働者を含む、22 歳の労働者 (たとえば) と協力するすべてのジョブと労働者を取得したいと考えています。

たとえば、A と B が仕事 X を行う 2 人の労働者で、そのうちの 1 人が 22 歳の場合、クエリで A と B の両方を返すようにします (X とそのプロパティと結合)。


ジョブ
1ジョブI
2ジョブ II

ワーカー:
A スミス 22
B ジョン 21
C ジャック 23

JW 関係
1 A
1 B
2 B
2 C

この例では、A と B の情報とジョブ I が必要です。なぜなら、A は 22 歳で、ジョブ I で B と協力しているためです。

4

3 に答える 3

0

スキーマが次のようになっていると仮定します。

Table workers {
    id,
    age,
    ...
}
Table jobs {
    id,
    worker_id,
    ...
}

質問に答えるには、サブクエリを含むクエリが必要です。

内部クエリ

select jobs.id 
from jobs 
left join workers on workers.id = jobs.worker_id 
where age = 22

22歳の労働者がいるすべての仕事を返します。

外側のクエリ

select * 
from jobs, workers 
where jobs.worker_id = workers.id 
  and jobs.id in (INNER QUERY)

内部クエリにジョブがあるすべてのジョブとワーカーを選択します。

最終結果:

select * 
from jobs, workers 
where jobs.worker_id = workers.id 
  and jobs.id in (select jobs.id 
                  from jobs 
                  left join workers on workers.id = jobs.worker_id 
                  where age = 22)
于 2012-05-11T00:29:57.667 に答える
0

あなたの質問は少し紛らわしい.. 22 歳の労働者のすべての仕事が欲しいですか、それとも A と B を返したいですか? それでも私は両方に答えようとします。

あなたのジョブテーブルにjob_id、worker_id、job_description ....があるとしましょう.そして、ワーカーテーブルにworker_id、age、other descriptionがあるとしましょう

22 歳のすべてのジョブとワーカーを取得するには、次のクエリを実行します。

SELECT jobs.*,workers.* FROM jobs,workers WHERE jobs.worker_id = workers.worker_id AND workers.age=22;

これにより、22 歳の従業員に関連付けられたすべてのジョブ データと従業員データが返されます。これがあなたの質問の答えになることを願っています。

于 2012-05-11T00:21:20.763 に答える