Lets say i have an empty table 'tbl_test' with 3 columns and no primary key; column1 and column2 are string, column3 is int
And i setup a function myFunc(column1Data, column2Data) {
// I expect it to be like this
if column1Data AND column2Data exists in my table, it will update and increment my column3
else if column1Data OR column2Data doesnt exist, it will insert column1Data, column2Data and column3 will set to 0
}
I have tried this solution https://stackoverflow.com/a/4330694
And this is my code: https://www.db-fiddle.com/f/cE1FSJawQJFjSHsk93Lrjt/0
CREATE TABLE tbl_test (
column1 varchar(255),
column2 varchar(255),
column3 int(12)
);
INSERT OR REPLACE INTO tbl_test (column1, column2, column3)
VALUES ( COALESCE((SELECT column1 FROM tbl_test WHERE column1 = 'column1Data'), 'column1Data') ,
COALESCE((SELECT column2 FROM tbl_test WHERE column2 = 'column2Data'), 'column2Data') ,
COALESCE((SELECT SUM(column3+1) AS Total FROM tbl_test WHERE column1 = 'column1Data' AND column2 = 'column2Data'), 0)
);
INSERT OR REPLACE INTO tbl_test (column1, column2, column3)
VALUES ( COALESCE((SELECT column1 FROM tbl_test WHERE column1 = 'column1Data'), 'column1Data') ,
COALESCE((SELECT column2 FROM tbl_test WHERE column2 = 'column2Data'), 'column2Data') ,
COALESCE((SELECT SUM(column3+1) AS Total FROM tbl_test WHERE column1 = 'column1Data' AND column2 = 'column2Data'), 0)
);
INSERT OR REPLACE INTO tbl_test (column1, column2, column3)
VALUES ( COALESCE((SELECT column1 FROM tbl_test WHERE column1 = 'column1Data'), 'column1Data') ,
COALESCE((SELECT column2 FROM tbl_test WHERE column2 = 'column2DataNew'), 'column2DataNew') ,
COALESCE((SELECT SUM(column3+1) AS Total FROM tbl_test WHERE column1 = 'column1Data' AND column2 = 'column2DataNew'), 0)
);
This will insert new data if either column1Data OR column2Data doesn't exist and will set column3 = 0 which is correct
But if column1Data AND column2Data does exist it will INSERT a new row and increments the column3, instead of updating it