简而言之,我有一张表foods
,偶尔会有重复。我有另一个关联的表food_tags
,其中包含与foods
表中列出的食物相关的标签。
目标:我想从food_tags
表中检索foods
表中找到的所有重复项的记录,但第一个记录除外在foods
表中(id
值最低的记录)。
SQL小提琴 - http://sqlfiddle.com/#!9/ee1c6/2
我有一个我想要的实例,但我几乎可以肯定这不是最好的方法。这就是我所拥有的:
SELECT
*
FROM
`food_tags`
WHERE
`food_id`
IN (
SELECT
`id`
FROM
`foods`
WHERE
`id`
NOT IN (
SELECT
MIN(`id`)
FROM
`foods`
GROUP BY
`name`
)
)
基本上我想排除foods
表(具有最低id
的表)中重复项的第一条记录,但检索所有剩余的重复项,然后从{{获取结果1}}表基于重复项的food_tags
。
我非常好奇,看看你对如何解决这个问题有什么想法,以及根据约束来解决问题的最佳方法。
附加信息:最终目标是根据相同条件删除这些记录以及其他表中的其他记录。我意识到有一些方法可以设置模式或规范化数据库,以根据另一个相关表中的删除处理重复条目和自动删除一个表中的记录。为了解决这个问题,我们假设这些选项不可用。
提前感谢您的时间和见解。