不确定标题是否足够好地解释了我的情况,但我已经搜索并发现我可以做一个 WHERE NOT EXISTS 子句,但我似乎无法弄清楚它需要如何构建。以下是我的情况。
我有一个表agents,其中包含代理登录信息等。
我有另一个表 listings,它通过“agent_id”链接到 agents 表。
代理商有自己的登录名,可以添加他们的房源等,整个系统根据谁登录等来拉取他们的房源。
我遇到了 super 管理员现在希望能够删除代理的情况,但他们希望他们的旧列表在数据库中保持存档和可搜索等。
我创建了一个表 agents_archived,当 super 管理员删除它们时,它会将它们在 agents 中的行复制到 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 表中提取代理列。
我希望这是有道理的。
最佳答案
我会使用以下内容:
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'
这将显示代理的所有列表,无论它们是事件的还是存档的,并且它会识别它们是事件的还是存档的。
关于如果不在当前表中,mysql 从存档表中选择数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24876467/