1

2つのテーブルからクエリを作成する必要があるため、たとえば、「学生」テーブルのテーブル構造は次のとおりです。

-------------------------------------------
id  |  Name  |  mom_job_id  |  dad_job_id
-------------------------------------------
1   | Test1  | 1            |  2
2   | Test2  | 3            |  1
-------------------------------------------

そして、私は次のような「ジョブ」テーブルを持っています:

---------------------------
id  | job_name
---------------------------
1   | designer
2   | writer
3   | programmer
---------------------------

Student テーブルのレコードを選択し、"mom_job_id" と "dad_job_id" を "job テーブル" の job_name に置き換えたい

私はこのクエリを試しました:

SELECT student.id, job.job_name as mom_job, job.job_name as dad_job
FROM student
INNER JOIN job ON mom_job_id = job.id
WHERE id=1

そのクエリは正常に機能しますが、お父さんの仕事はお母さんの仕事と同じに設定されているため、別の INNER JOIN を追加して、次のようにクエリを作成します。

SELECT student.id, job.job_name as mom_job, job.job_name as dad_job
FROM student
INNER JOIN job ON mom_job_id = job.id
INNER JOIN job ON dad_job_id = job.id
WHERE id=1

クエリは機能しますが、レコードが返されませんでした。では、どうすればこれを解決できますか?問題は job.id にあると思います

4

2 に答える 2

2

ジョブ テーブルを 2 回参照しているため、ジョブ テーブルにエイリアスを設定する必要があります。

a を使用するLEFT OUTER JOINと、学生テーブル内の一致するレコードごとに常に行が取得されます。お母さんまたはお父さんのジョブ テーブルに一致するレコードがない場合、その列はNULL値を返します。

SELECT s.id, mom.job_name as mom_job, dad.job_name as dad_job
FROM student s
  LEFT OUTER JOIN job mom ON s.mom_job_id = mom.id
  LEFT OUTER JOIN job dad ON s.dad_job_id = dad.id
WHERE s.id = 1
于 2013-05-10T15:29:20.193 に答える
2

あなたはこれに近いです.JOINするたびにジョブテーブルに異なるエイリアスを与えるだけです.

SELECT s.id, job_mom.job_name as mom_job, job_dad.job_name as dad_job
FROM student s
INNER JOIN job job_mom ON s.mom_job_id = job_mom.id
INNER JOIN job job_dad ON s.dad_job_id = job_dad.id
WHERE s.id=1

job テーブルの JOIN が行を返さない場合でも、学生テーブルのデータを表示したい場合は、LEFT JOIN を使用できます。

SELECT s.id, job_mom.job_name as mom_job, job_dad.job_name as dad_job
FROM student s
LEFT JOIN job job_mom ON s.mom_job_id = job_mom.id
LEFT JOIN job job_dad ON s.dad_job_id = job_dad.id
WHERE s.id=1
于 2013-05-10T15:29:47.713 に答える