2012-04-12 104 views
4

我有2个SQL表 表名:代理包含一个coloumn一个记录AGENTIDMySQL查询搜索所有记录对场逗号分隔值

表命名为:空缺是一个与数据正在显示。 表命名空缺具有包含值simmilar这个

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.AgentID该值的记录vacancies.Agents。这是目前为止的查询,但它所反转的是那些空位中没有超过一个值的记录。例如,如果正在搜索的值是Agent3,则它应该返回行1,3和4,而不是返回第3行。

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) 

这怎么解决?

回答

3

我相信你的参数在FIND_IN_SET之后。此组应该放在第二位

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

+0

我倒过来试了一下,但它只是显示了所有的行以及每行的重复项。 – 2012-04-12 13:59:10

+0

如果你只想要'Agent3',你还需要搜索那个'和AgentID ='Agent3''。查看我对该帖子的更新。 – mellamokb 2012-04-12 14:00:57

+0

我提到了agent3作为一个运行时的例子。我实际上想根据表代理中的列AgentID进行检查。 – 2012-04-12 14:02:39

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' 
+0

agentID不存在于空位表中,除了它的值位于空位表的代理字段中。 另外我不能直接搜索代理3,它必须从代理中动态获取.AgentID – 2012-04-12 14:21:32