[英]SQL Left Join Return Latest Row
兩個表,左連接。 為方便起見,請參見表 1 和表 2。
表 1 包含人員列表及其當前狀態,表 2 是他們的所有“邀請”。 作為加入的一部分,我試圖做的所有事情都是在列表中顯示所有當前的“人”,然后是最新的邀請狀態(來自表 2),因此從表 2 中返回一行。
我一切正常……但它會重復,例如,如果一個人有多個邀請,它會將他們兩次列入名單。 我只想將其限制為
$sql = "SELECT table1.fieldname as table1fielname table2.fieldname [more fields]
FROM xxx
LEFT JOIN xxx on table1.sharedid=table2.sharedid
WHERE XXX LIMIT 1 ";`
顯然,限制 1 沒有做它應該做的事情。 我曾嘗試在括號中添加額外的 select 語句,但老實說它只會破壞一切,我根本不是專家。
我也不是專家,但我會嘗試。 您是否嘗試過使用 DISTINCT?
舉個例子:
SELECT DISTINCT column_name1,column_name2
從表名; [...]
它通常刪除雙重匹配。
以下是鏈接: http : //www.w3schools.com/sql/sql_distinct.asp https://www.techonthenet.com/oracle/distinct.php
給出示例數據。 並使用好的表名和列名。 例如:
(這將返回滿足連接的所有行):
WITH people(ppl_id,ppl_name,status) AS (
SELECT 1,'Arthur','active'
UNION ALL SELECT 2,'Tricia','active'
), invites(ppl_id,inv_id,inv_date) AS (
SELECT 1,1, DATE '2017-01-01'
UNION ALL SELECT 1,2, DATE '2017-01-07'
UNION ALL SELECT 1,3, DATE '2017-01-08'
UNION ALL SELECT 2,1, DATE '2017-01-01'
UNION ALL SELECT 2,2, DATE '2017-01-08'
)
SELECT
*
FROM people
JOIN invites USING(ppl_id)
ORDER BY 1
;
ppl_id|ppl_name|status|inv_id|inv_date
1|Arthur |active| 1|2017-01-01
1|Arthur |active| 3|2017-01-08
1|Arthur |active| 2|2017-01-07
2|Tricia |active| 2|2017-01-08
2|Tricia |active| 1|2017-01-01
但我們只需要 'Arthur' 和 '2017-01-08' 和 'Tricia' 和 '2017-01-08'。
對於支持 ANSI 99 的任何數據庫,您可以嘗試使用包含每個“人員 ID”的最新邀請日期的臨時表,並將該臨時表與邀請表連接起來。 我們稱該表為newest_invite_date
,顯然,它完成了我們期望它做的事情:
WITH people(ppl_id,ppl_name,status) AS (
SELECT 1,'Arthur','active'
UNION ALL SELECT 2,'Tricia','active'
), invites(ppl_id,inv_id,inv_date) AS (
SELECT 1,1, DATE '2017-01-01'
UNION ALL SELECT 1,2, DATE '2017-01-07'
UNION ALL SELECT 1,3, DATE '2017-01-08'
UNION ALL SELECT 2,1, DATE '2017-01-01'
UNION ALL SELECT 2,2, DATE '2017-01-08'
), newest_invite_date(ppl_id,inv_date) AS (
SELECT ppl_id,MAX(inv_date)
FROM invites
GROUP BY ppl_id
)
SELECT
people.ppl_id
, people.ppl_name
, people.status
, newest_invite_date.inv_date
FROM people
JOIN newest_invite_date USING(ppl_id)
ORDER BY 1
;
ppl_id|ppl_name|status|inv_date
1|Arthur |active|2017-01-08
2|Tricia |active|2017-01-08
這就是你要找的嗎?
玩得開心...... Marco the Sane
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.