我想将TABLE1与TABLE2连接,但只获得TABLE2中最高的id匹配。 TABLE1将始终只有1次出现,而TABLE2将有多次出现,我只想要具有最高id的行。
示例:
TABLE1:
+----+------+
| id | name |
+----+------+
| 1 | a |
+----+------+
TABLE2
+----+-----------+------+-------+-------+
| id | table1_id | text | user1 | user2 |
+----+-----------+------+-------+-------+
| 1 | 1 | aaa | 1 | 2 |
+----+-----------+------+-------+-------+
| 2 | 1 | bbb | 2 | 1 |
+----+-----------+------+-------+-------+
这就是我想要的结果:
+-----------+-----------+-----------+------+------+
| table1.id | table2.id | table1_id | text | name |
+-----------+-----------+-----------+------+------+
| 1 | 2 | 1 | bbb | a |
+-----------+-----------+-----------+------+------+
我试过这个:
SELECT * FROM table1 LEFT JOIN table2 ON table1.id = table2.table1_id WHERE user1 = '1' OR user2 = '1'
输出是:
+-----------+-----------+-----------+------+------+
| table1.id | table2.id | table1_id | text | name |
+-----------+-----------+-----------+------+------+
| 1 | 1 | 1 | aaa | a |
+-----------+-----------+-----------+------+------+
但是他给了我在TABLE2中具有最低id的行,并且我想要具有最高id的行。我怎么能这样做?
答案 0 :(得分:1)
一种方法将“最大”条件放在ON
子句中:
SELECT t1.*, t2.*
FROM table1 t1 LEFT JOIN
table2 t2
ON t1.id = t1.table1_id AND
t2.id = (SELECT MAX(tt2.id) FROM table2 tt2 WHERE tt2.table1_id = t2.table1_id)
WHERE 1 IN (t1.user1, t1.user2);