簡體   English   中英

如何選擇 TABLE1 中的所有內容並加入 TABLE2 中匹配的 MAX(id)?

[英]How do i select all in TABLE1 and join with matching MAX(id) from TABLE2?

我想將 TABLE1 與 TABLE2 連接起來,但只能在 TABLE2 中獲得最高的 id 匹配。 TABLE1 將始終只有 1 次出現,而 TABLE2 將有多次出現,我只想要具有最高 id 的行。

示例:

表1:

+----+------+
| id | name |
+----+------+
|  1 |   a  |
+----+------+

表2

    +----+-----------+------+-------+-------+
    | 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 最高的行。 我該怎么做?

一種方法將“最大”條件放在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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM