アソシエーションのデータベースから、アソシエイトの名前と最後に支払われたシェアを抽出する必要がありますが、1 日試行してもそのデータを抽出できません。
テーブル senhas は株式を表し、テーブル associados は従業員データを表し、senhas_associados は多対多の関係であるため、従業員が支払う株式を表します。
これを照会するために、有料シェアを表す senhas_associados の seassoc_senha_id にある最大 ID (senha) でシェアを照会しようとしています。
これが私がこれまでに試したことです:
まず、私はこのステートメントを試しました。出力は必須ですが、必要なシェアを支払っていないアソシエイトは表示されません (senhas_associados にレコードがありません)。
SELECT assoc_nome, senha_desig
FROM associados, senhas, senhas_associados
WHERE assoc_id = seassoc_assoc_id
AND seassoc_senha_id = senha_id
AND seassoc_senha_id IN (SELECT max(seassoc_senha_id)
FROM senhas, senhas_associados
WHERE seassoc_senha_id = senha_id
AND seassoc_assoc_id = assoc_id)
出力:
assoc_nome | senha_desig
------------------------------
Carlos Costa | Maio
Rodrigo | Abril
私もこれを追加しようとしました:
SELECT assoc_nome, senha_desig
FROM associados, senhas, senhas_associados
WHERE assoc_id = seassoc_assoc_id
AND seassoc_senha_id = senha_id
AND seassoc_senha_id IN (SELECT max(seassoc_senha_id)
FROM senhas, senhas_associados
WHERE seassoc_senha_id = senha_id
AND seassoc_assoc_id = assoc_id) OR senha_desig is null
無駄に、出力は同じでした。
次に、「戦術」を変更し、左結合に進みました。
SELECT assoc_nome, senha_desig
FROM associados
LEFT JOIN senhas_associados ON associados.assoc_id = senhas_associados.seassoc_assoc_id
LEFT JOIN senhas ON senhas.senha_id = senhas_associados.seassoc_senha_id
出力:
assoc_nome | senha_desig
-------------------------
Carlos Costa | Abril
Carlos Costa | Janeiro
Carlos Costa | Fevereiro
Carlos Costa | Maio
Rodrigo | Janeiro
Rodrigo | Fevereiro
Rodrigo | Abril
Pedro Soares | NULL
NULL が表示されるようになりましたが、max 関数を配置する場所が見つかりません。
今日の午後、私はこれで立ち往生しているので、あなたの助けを求めています。
みんな、ありがとう、
よろしく。
関連するテーブルのリレーショナル モデルは次のとおりです: http://i44.tinypic.com/30aykv8.png