Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 345
  • Last Modified:

difference between two similar tables

CREATE TABLE recipes_new LIKE production.recipes; INSERT recipes_new SELECT * FROM production.recipes;

identical tables

and then recipes_new inserts a new value


is there a diff command
so I can see difference between recipes and recipes_new
0
rgb192
Asked:
rgb192
  • 2
  • 2
1 Solution
 
Kevin CrossChief Technology OfficerCommented:
I cannot recall using EXCEPT in MySQL. EXCEPT in SQL Server lets you see the values in the first table that are not in the second. This is not available in MySQL to my knowledge, but you can give it a try.

SELECT column_that_should_be_unique FROM recipes_new
EXCEPT
SELECT column_that_should_be_unique FROM production.recipes
;

Open in new window


Here is an alternative that will work in most database systems.

SELECT column_that_should_be_unique 
FROM recipes_new n
WHERE NOT EXISTS (
    SELECT 1
    FROM production.recipes o
    WHERE o.column_that_should_be_unique = n.column_that_should_be_unique 
)
;

Open in new window


It multiple columns are necessary to match-up rows, then just alter the WHERE clause accordingly. Remember that an auto-numbered field is not sufficient as the two tables will increment at different paces; therefore, the same row in both tables may have a different id if it is a simple incrementing integer.
0
 
rgb192Author Commented:
SELECT id FROM recipes_new
EXCEPT
SELECT id FROM .recipes
;


Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT id FROM recipes' at line 3




SELECT id
FROM recipes_new n
WHERE NOT EXISTS (
    SELECT 1
    FROM recipes o
    WHERE o.id = n.id
)
;


no results returned
0
 
Kevin CrossChief Technology OfficerCommented:
As I said, EXCEPT is a SQL Server syntax that I did not believe is available in MySQL, so the first result I expected. The second indicates to me that the query ran, but there are no rows that belong in the new table that are not in the original.

Are you expecting some to be there?

If so, the issue may be that the id does not properly match rows. For example, if id is an autonumber, you will successfully match every row if both tables have the same number of rows (i.e., 1 = 1). However, if row one for one table has different values than row one for the other, you really have a non-existent row. Therefore, the trick is to find the column or columns that accurately identify a row.
0
 
rgb192Author Commented:
the where not exists works when I add rows into the first table

thanks
0

Featured Post

Free learning courses: Active Directory Deep Dive

Get a firm grasp on your IT environment when you learn Active Directory best practices with Veeam! Watch all, or choose any amount, of this three-part webinar series to improve your skills. From the basics to virtualization and backup, we got you covered.

  • 2
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now