如果不在当前表中,mysql从归档表中选择数据

时间:2014-07-21 23:22:07

标签: mysql sql

不确定标题是否足以解释我的情况但是我已经搜索过并发现我可以做一个不存在的条款,但我似乎无法弄清楚它究竟是如何需要的结构化的。以下是我的情况。

我有一个表代理商,其中包含代理登录信息等。

我有另一个表列表,它与代理人表格链接到" agent_id"。

代理商有自己的登录信息,可以添加他们的列表等,整个系统根据登录的人员等列出他们的列表。

我遇到了超级管理员现在希望能够删除代理的情况,但是他们希望他们的旧列表在数据库中保持存档和搜索等。

我创建了一个表 agents_archived ,当超级管理员删除它们时,它会将代理中的行复制到 agents_archived 并将其从代理人表。

我的问题是,如果当前代理表中不存在代理数据,我不确定如何让查询选择代理数据。例如,这是一个搜索查询。

SELECT l.*, a.first_name, a.last_name FROM listings l 
LEFT JOIN agents a ON l.agent_id = a.id WHERE l.agent_id = '" . $_GET['qa'] . "' 
ORDER BY FIELD(l.status, 'active','inactive','under-contract','on-hold','title-issue','auction','closed','withdrawn'), l.street_name

我需要它从agents_archived表中提取代理列,如果它不存在于当前。

我希望这是有道理的。

1 个答案:

答案 0 :(得分:0)

我会使用以下内容:

SELECT l.*,
       ifnull(a.first_name,a2.first_name) as first_name,
       ifnull(a.last_name,a2.last_name) as last_name,
       case when a.id is null then 'archived' else 'active' end as agent_status
  FROM listings l
  LEFT JOIN agents a
    ON l.agent_id = a.id
  left join agents_archived a2
    on l.agenct_id = a2.id
 WHERE l.agent_id = 'xyz'

这将显示所有代理商的列表,无论它们是处于活动状态还是已归档,并且它将识别它们是活动的还是存档的。