diff --git a/sql_metadata/parser.py b/sql_metadata/parser.py
index 349f044..c422846 100644
--- a/sql_metadata/parser.py
+++ b/sql_metadata/parser.py
@@ -357,6 +357,14 @@ class Parser:  # pylint: disable=R0902
                     )
                 ):
                     continue
+
+                # handle INSERT INTO ON DUPLICATE KEY UPDATE queries
+                if (
+                    token.last_keyword_normalized == "UPDATE"
+                    and self.query_type == "INSERT"
+                ):
+                    continue
+
                 table_name = str(token.value.strip("`"))
                 token.token_type = TokenType.TABLE
                 tables.append(table_name)

diff --git a/test/test_getting_tables.py b/test/test_getting_tables.py
index 76c8741..d90b0ce 100644
--- a/test/test_getting_tables.py
+++ b/test/test_getting_tables.py
@@ -658,3 +658,11 @@ def test_cross_join_with_subquery():
     assert parser.subqueries == {
         "foobar": "SELECT * FROM bars",
     }
+
+
+def test_insert_into_on_duplicate_key_ipdate():
+    assert Parser(
+        "INSERT INTO user (id, name, age)"
+        " VALUES ('user1', 'john doe', 20)"
+        " ON DUPLICATE KEY UPDATE name='john doe', age=20"
+    ).tables == ["user"]

Can not handle correctly with mysql upsert statement
```sql
insert into user (id, name, age) 
  values ('user1', 'john doe', 20) 
  on duplicate key 
  update name='john doe', age=20;
```

The correct value of `Parser(sql).tables` is `['user']`, but it returns `['user', 'name', 'age']`.

I used `0.4.3`.
test/test_getting_tables.py::test_insert_into_on_duplicate_key_ipdate
test/test_getting_tables.py::test_simple_queries_tables test/test_getting_tables.py::test_complex_query_tables test/test_getting_tables.py::test_joins test/test_getting_tables.py::test_quoted_names test/test_getting_tables.py::test_update_and_replace test/test_getting_tables.py::test_order_bys test/test_getting_tables.py::test_three_part_qualified_names test/test_getting_tables.py::test_insert_queries test/test_getting_tables.py::test_select_aliases test/test_getting_tables.py::test_table_name_with_group_by test/test_getting_tables.py::test_datasets test/test_getting_tables.py::test_queries_with_distinct test/test_getting_tables.py::test_table_names_with_dashes test/test_getting_tables.py::test_unions test/test_getting_tables.py::test_with_brackets test/test_getting_tables.py::test_db2_query test/test_getting_tables.py::test_get_tables_with_leading_digits test/test_getting_tables.py::test_insert_ignore_with_comments test/test_getting_tables.py::test_mutli_from_aliases_without_as test/test_getting_tables.py::test_tables_with_aggregation test/test_getting_tables.py::test_insert_with_on_conflict test/test_getting_tables.py::test_insert_with_on_conflict_set_name test/test_getting_tables.py::test_with_keyword_in_joins test/test_getting_tables.py::test_getting_proper_tables_with_keyword_aliases test/test_getting_tables.py::test_cross_join_with_subquery