0

私はEnterpriseモデルを持っています:

name - VARCHAR 255

Candidatモデル:

first_name - VARCHAR 255
last_name - VARCHAR 255

そしてTypeモデル:

name - VARCHAR 255

各企業は、関心のある 1 つ以上のタイプを選択できます。各候補者も同様に選択できます。

現在ログインしている企業といくつかのタイプを共有するすべての候補のリストを表示しようとしています。まったく同じタイプである必要はなく、一部を共有するだけです。

候補とタイプ、および企業とタイプの間のリンクを保持するために、2 つの結合テーブルを使用しています。

id - INT
candidat_id - INT
type_id - INT

id - INT
enterprise_id INT
type_id INT

現在使用しているSQLクエリは次のとおりです。

SELECT candidats.* FROM candidats
    INNER JOIN candidats_types ON candidats_types.candidat_id = candidats.id
    RIGHT JOIN entreprises_types ON entreprises_types.type_id = candidats.type_id
    WHERE entreprises_types.entreprise_id = 1

クエリの最後の1は、現在ログインしているエンタープライズの ID であり、テスト目的でハードコードされています。

ただし、これは機能せず、この企業と同じタイプを共有する候補がいくつかあるにもかかわらず、空の配列を返します。

このクエリで何が間違っていますか?

4

1 に答える 1

0

テーブルの説明によると、candidate.type_id存在しないため、クエリはエラーを生成するはずです。私は提案します:

SELECT c.*
FROM candidats c INNER JOIN
     candidats_types ct
     ON ct.candidat_id = c.id INNER JOIN
     entreprises_types et
     ON et.type_id = ct.type_id
WHERE et.entreprise_id = 1;

あなたの問題の説明から、RIGHT JOIN必要はありません。

于 2015-12-07T19:39:39.087 に答える