Вы можете использовать приведенный ниже SQL, вот пример в соответствии с вашими ожиданиями.
Запрос:
SELECT
a.ID,
CASE
WHEN
LEAST(MIN(b.red1), MIN(b.red2)) BETWEEN - 5 AND 5
THEN
IFNULL(LEAST(MIN(CASE
WHEN red1 NOT BETWEEN - 5 AND 5 THEN red1
END),
MIN(CASE
WHEN red2 NOT BETWEEN - 5 AND 5 THEN red2
END)),
LEAST(MIN(b.red1), MIN(b.red2)))
ELSE LEAST(MIN(b.red1), MIN(b.red2))
END AS `Number`
FROM
table1 a
JOIN
table2 b ON a.key = b.key
GROUP BY a.ID;
Пример:
mysql> create table table1(ID varchar(20),`key` varchar(20));
Query OK, 0 rows affected (0.23 sec)
mysql> insert into table1 values
-> ('TTT-1','atre-0-1'),
-> ('TTT-2','atrt-4-2'),
-> ('TTT-3','attr-1-3'),
-> ('TTT-4','aert-2-5');
Query OK, 4 rows affected (0.27 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql>
mysql> create table table2(`key` varchar(20),red1 int(5),red2 int(5));
Query OK, 0 rows affected (0.30 sec)
mysql> insert into table2 values
-> ('atre-0-1',10,25),
-> ('atre-0-1',15,07),
-> ('atre-0-1',16,19),
-> ('atrt-4-2',11,21),
-> ('atrt-4-2',07,22),
-> ('attr-1-3',-4,3),
-> ('attr-1-3',33,11),
-> ('attr-1-3',50,45),
-> ('aert-2-5',-5,2),
-> ('aert-2-5',-4,1);
Query OK, 10 rows affected (0.29 sec)
Records: 10 Duplicates: 0 Warnings: 0
mysql>
mysql> select * from table1;
+-------+----------+
| ID | key |
+-------+----------+
| TTT-1 | atre-0-1 |
| TTT-2 | atrt-4-2 |
| TTT-3 | attr-1-3 |
| TTT-4 | aert-2-5 |
+-------+----------+
4 rows in set (0.20 sec)
mysql> select * from table2;
+----------+------+------+
| key | red1 | red2 |
+----------+------+------+
| atre-0-1 | 10 | 25 |
| atre-0-1 | 15 | 7 |
| atre-0-1 | 16 | 19 |
| atrt-4-2 | 11 | 21 |
| atrt-4-2 | 7 | 22 |
| attr-1-3 | -4 | 3 |
| attr-1-3 | 33 | 11 |
| attr-1-3 | 50 | 45 |
| aert-2-5 | -5 | 2 |
| aert-2-5 | -4 | 1 |
+----------+------+------+
10 rows in set (0.21 sec)
mysql>
mysql> SELECT
-> a.ID,
-> CASE
-> WHEN
-> LEAST(MIN(b.red1), MIN(b.red2)) BETWEEN - 5 AND 5
-> THEN
-> IFNULL(LEAST(MIN(CASE
-> WHEN red1 NOT BETWEEN - 5 AND 5 THEN red1
-> END),
-> MIN(CASE
-> WHEN red2 NOT BETWEEN - 5 AND 5 THEN red2
-> END)),
-> LEAST(MIN(b.red1), MIN(b.red2)))
-> ELSE LEAST(MIN(b.red1), MIN(b.red2))
-> END AS `Number`
-> FROM
-> table1 a
-> JOIN
-> table2 b ON a.key = b.key
-> GROUP BY a.ID;
+-------+--------+
| ID | Number |
+-------+--------+
| TTT-1 | 7 |
| TTT-2 | 7 |
| TTT-3 | 11 |
| TTT-4 | -5 |
+-------+--------+
4 rows in set (0.28 sec)