In short, I have have a table `foods` that has duplicates on occasion. I have another associated table `food_tags` that has tags associated with the foods listed in the `foods` table.
**Objective:** I want to retrieve the records from the `food_tags` table for all duplicates found in the `foods` table except for the *first* records in the `foods` table (the records with the lowest `id` value).
SQL Fiddle - http://sqlfiddle.com/#!9/ee1c6/2
I have a working example of what I want but I'm almost certain this is not the best way to do it. Here's what I have:
SELECT
*
FROM
`food_tags`
WHERE
`food_id`
IN (
SELECT
`id`
FROM
`foods`
WHERE
`id`
NOT IN (
SELECT
MIN(`id`)
FROM
`foods`
GROUP BY
`name`
)
)
Basically I want to exclude the first record of the duplicates in the `foods` table (the one with the lowest `id`), but retrieve all the remaining duplicates and then get the results from the `food_tags` table based on the `food_id` of the duplicates.
I'm very curious to see what your ideas are on how to solve this problem and the best way to approach it based on the constraints.
**Additional Information:** Ultimately the goal is to delete these records, along with other records in other tables based on the same criteria. I realize that there are ways you can setup the schema or normalize the database to handle duplicate entries and automatic deletions of records from one table based on deletions in another related table. For the sake of the issue, let's assume that these options are not available.
Thanks in advance for your time and insight.