在多个表上实现MySQL查询
我需要提出一个问题,我发现这个问题有点复杂 这是我的数据库结构: 用户将添加/输入过滤器,根据过滤器的不同,将显示相应的杂志和报纸收藏 可能的过滤器有:在多个表上实现MySQL查询,mysql,database,mysql-workbench,Mysql,Database,Mysql Workbench,我需要提出一个问题,我发现这个问题有点复杂 这是我的数据库结构: 用户将添加/输入过滤器,根据过滤器的不同,将显示相应的杂志和报纸收藏 可能的过滤器有: 杂志/报纸名称 起始日期 托德 选择结果是否仅来自杂志或报纸或两者 是否对收集的数据进行了分析 好吧,假设用户输入了一个名字,包括日期、杂志和报纸,以及只分析过的收藏,那么查询结果会是什么样的呢?我想显示收藏日期、报纸/杂志名称、起止日期。 我一直在试图弄清楚这个问题,但我有点挣扎 有人有什么建议吗?希望一切都清楚:) 谢谢 SELE
- 杂志/报纸名称
- 起始日期
- 托德
- 选择结果是否仅来自杂志或报纸或两者
- 是否对收集的数据进行了分析
SELECT m.name as mag_name,
n.name as news_paper_name,
c.fromDate,
c.toDate
FROM Collections AS C
INNER JOIN Target AS T ON
C.TargetID = T.TargetID
INNER JOIN Magazine AS M ON
T.TargetID = M.id
INNER JOIN Newspaper AS N ON
T.TargerID = N.id
INNER JOIN Analysis AS A ON
C.CollectionID = A.CollectionID
从连接的角度来看,这应该是可行的。我假设当某个东西被分析时,有一个记录在分析中,而不是一个被分析的记录。只需添加一个where子句和任何您想要筛选的信息。您是否有一段您尝试执行的代码?从图片中,我不清楚目标表和其他表之间的ID是如何关联的;我把它设为target.type,可以是“collection”、“magazine”或“Paper”,那么ssnID是对应表的ID吗?@Joe T,我试图突出显示ID,以便更清晰。杂志和报纸是target的子类型(对不起,我不确定如何在MySQL工作台上表示它)。因此,targetID可以是报纸ID或杂志ID(PKs)。ssnID对应于newspaperID或magazineID,但它们不用于此查询。Collections不是Target的子类型,但表集合将targetID作为外键,以确定哪个是与特定集合相关的目标感谢您的回答,它确实帮助我记住了一些事情并澄清了其他事情。它只有一个问题。当我同时输入m.name和n.name时,它会给我一个空集。但是当我分别做每一个的时候,它就工作了。你对如何解决这个问题有什么想法吗?