2012-04-12 84 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