4

2つのSQLテーブルがありますテーブル名:エージェント には、列のAgentIDを持つレコードが含まれています

次の名前のテーブル:vacanciesは、データが表示されているテーブルです。vacanciesという名前のテーブルにはvacancies.Agentsがあり、これに類似した値が含まれています

VacanyID    Company       position        CTC        Candidates        Agents
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
FBVAC001  | HDFC      |  Branch Manager | 4.5  | FBCAN001,FBCAN002| Agent3,Agent4
FBVAC003  | TBNH      |  Branch Manager | 4.5  | FBCAN004,FBCAN005| Agent2,Agent4
FBVAC005  | MMNT      |  Branch Manager | 4.5  | FBCAN008,FBCAN006| Agent3
FBVAC008  | LCFC      |  Branch Manager | 4.5  | FBCAN009,FBCAN023| Agent3,Agent4
FBVAC008  | KOTC      |  Branch Manager | 4.5  | FBCAN009,FBCAN023| Agent5,Agent4

テーブル名agentsのagents.AgentIDに対応する値を含むレコードのみを返すクエリを実行したいと思います。これはこれまでのクエリですが、返されるのは、vacancies.Agentsに複数の値がないレコードだけです。

たとえば、検索対象の値がAgent3の場合、行3のみを返す代わりに、行1、3、および4を返す必要があります。

SELECT
vacancies.VacancyID,
vacancies.Company,
vacancies.`Position`,
vacancies.CTC,
vacancies.Candidates,
vacancies.Agents
FROM vacancies
, agents
WHERE (FIND_IN_SET(vacancies.Agents,agents.AgentID) <> 0)

これはどのように解決できますか?

4

2 に答える 2

3

にパラメータが逆になっていると思いますFIND_IN_SET。セットは2番目に来る必要があります

FIND_IN_SET(agents.AgentID, vacancies.Agents)

詳細:http ://www.bitbybit.dk/carsten/blog/?p = 162


また、特定のエージェントのみを表示したい場合は、それもフィルタリングする必要があります。そうしないと、エージェントと一致する空席のすべての可能な組み合わせが得られます(したがって、行が重複します)。

AND Agents.AgentID = 'Agent3'

デモ:http ://www.sqlfiddle.com/#!2 / b4dcb / 3

于 2012-04-12T13:57:36.250 に答える
0
SELECT
  vacancies.VacancyID,
  vacancies.Company,
  vacancies.`Position`,
  vacancies.CTC,
  vacancies.Candidates,
  vacancies.Agents
FROM vacancies,
  agents
WHERE (select
     agents.agentid,
     vacancies.agentid
   from agents
     left join vacancies
       on vacancies.agentid = agents.agentid)
and agents.agentid = 'Agent3'
于 2012-04-12T14:17:57.053 に答える