Skip to main content

Find unmatched referenced column values

When you use LOAD DATA LOCAL INFILE on a table that contains a foreign key constraint you get an error with an explanation that a the table cannot be updated because a foreign key constraint fails.....

1. Turn off foreign key checks with the following command at the MySQL command line client

a. set foreign_key_checks = 0;

3. issue your load data command again

4. once the data is loaded issue the following query

select referencing_table . referencing_column
FROM referencing_table
LEFT JOIN referenced_table ON
(
referencing_table . referencing_column
=
referenced_table.referenced_column
)
WHERE
referenced_table.referenced_column IS NULL;

This will give you a list of all the column values in the offending table that do not match a value in the referenced table.

5. Update all of the values listed in the query results from above

6. turn the foreign_key_checks back on with the following
a. set foreign_key_checks = 1;

Why this works

We are doing a LEFT JOIN which means that everything on the left side of the expression will be returned regardless of whether or not there is a match on the join. We purposefully put our referencing column on the left.

Then we joined it to the table we want to reference with the JOIN....ON statement so there is a relationship between the tables.

We then excluded all instances where there was a match with the WHERE clause by only selecting instances of the join where the referenced column was null (if it wasn't null then the values in the 2 tables did match and therefore, was not breaking the constraint).

Why this is important
Sure you got your data loaded by turning off the foreign key check so you're good right? No you need to take this step and update all the values that don't match because

1. you added the constraint for a reason right (probably consistent, reliable data) so you want to make sure that your data is consistent and reliable.

2. If you issue an alter table statement on a table that is violating a foreign key constraint the server will error and you won't be able to alter your table with out setting the foreign_key_checks = 0 again.

Comments

Popular posts from this blog

A Man Full of Leprosy

In the Gospel reading for Mass today, LK 5:12-16 we read Now there was a man full of leprosy in one of the towns where he was; and when he saw Jesus, he fell prostrate, pleaded with him, and said, “Lord, if you wish, you can make me clean.” LK 5:12 The weather this morning forced me into the gym and onto the treadmill. So as I was runningandpraying on the treadmill I kept coming back to this first verse of today's Gospel. This verse I think addresses 2 profound yet prevalent misconceptions about Christianity. On one hand, there is a notion that Christians believe they are perfect and don't sin and don't need to be made clean. But that is just not true. We are all like this leper, full of sin that is eating away our life. That doesn't mean we cannot approach our Lord. Rather, it means that we must approach Him because He is the one who can make us clean. On the other hand, a lot of people have the idea that Christians think they merely need to say "Jesus i...

2013 BeeBumble 10k: Race Report

This has quickly become one of my favorite races of the year and I am not alone because there was a record 575 participants across the different events this year. I like the small town atmosphere, I like the course that is an out and back on a country road, and the timing makes it a perfect tune up race for the fall season. After my performance here the last two years I am also really beginning to appreciate it for the confidence booster it is and it's ability to add a breath of fresh air to the end of the training cycle for the 2013 Indianapolis Monumental Marathon. For this race I added an early morning shake out run to get my body primed for running. This was just a short and easy 20 minute run very first thing out of bed. Nearly all of my running is first thing in the morning but  I've never done it as a shakeout for a race. I liked it and think I'll keep it. The last 5k I ran I didn't do a warm up and I learned my lesson because it cost me a very slow fi...

Running Goals or Running Goal; What is it That I Want?

The other day I got all caught up in setting running goals for myself for the rest of the year. After the goals were set, I found myself starting to worry about how I was going to reach them. Wondering if there would be time to sufficiently prepare for them all. My goals were to run a 5k in under 20 minutes, to run a half marathon in 1:25 minutes and qualify for and run in the Boston marathon in 2014. At first, I thought that setting and meeting these goals would make me a more serious runner. In fact, I thought that to be the "serious" runner I want to be that I needed these goals. However, while I was running the other morning I realized that first of all, I was thinking about how to shift my training to meet my 5k goal. Then I began thinking about the right approach to a 1:25 half while training to qualify for Boston in a full marathon a month later. That is when I realized that the ancillary goals were starting to consume my focus and quite possibly i...