I have two MySQL tables. What I am trying to do is to export the information where Value 1 is 1 less than Value 2 AND where ID_1 does not have its Value 1 and Value 2 equal.
Note:
- Fields Value 1 and 2 are just integers.
- Each distinct ID_A has the same Value_2
- If there are two Value_1s that are one less than Value_2, look to Value_3 and select one that is higher
- The reason why I have two tables here is because I am going to output information from both tables
- We can write a script for this, but I need to do this in a single command for bonus points (which my instructor declared is possible)… I haven’t even started a script for this, as I don’t really know how to do that…
tableA looks like this:
ID_1 ID_2
A A
A B
B A
B B
C A
C B
C C
tableB looks like this:
ID_1 ID_2 Value_1 Value_2 Value_3
A A 2 3 NULL
A B 3 3 NULL
B A 4 5 NULL
B B 7 5 NULL
C A 7 8 98
C B 3 8 NULL
C C 7 8 56
The query should return this:
ID_1 ID_2
B A
C A
Here is what I have so far… And it keeps returning no hits, which is making me confused. I believe it is the AND clause after the first WHERE statement where I need to fix
SELECT CONCAT(...)
INTO OUTFILE '/tmp/outfile.tab'
FIELDS TERMINATED BY '\t'
ESCAPED BY ''
FROM tableA
INNER
JOIN tableB
ON tableA.ID_1 = tableB.ID_1
AND tableA.ID_2 = tableB.ID_2
WHERE tableB.Value_1 - 1 = tableB.Value_2
AND tableA.ID_1 !=
( SELECT DISTINCT
ID_1
FROM tableB
WHERE ID_1 = tableA.ID_1
AND Value_1 = Value_2
)
;
One final note: we issue all commands through putty, in which we can access MySQL
I am not 100% sure of the question, but if I get it right, the first row of tableB (Line 25 in https://i.stack.imgur.com/nQLj7.jpg) should NOT be selected, because ID_1=A has Value_1=3 in the second row (Line 26 in https://i.stack.imgur.com/nQLj7.jpg), which is the same as Value_1 of the first row (Line 25 in https://i.stack.imgur.com/nQLj7.jpg).
So you could start with something like
which fullfills requirements #1 and #2. For requirement #3 (if there are two rows for an ID_1, chose the one with the highest Value_3), we need to sort that on Value_3 and wrap it in a superquery for grouping:
which gives the correct answer for the test data in your example.