我正在為當地教堂的圣誕禮籃驅動器建立一個禮籃網站,并且我正在尋找有關如何實作所需 MySQL 查詢/結果的一些指導。預期的頁面只是一個客戶索引,但它顯示了當前/活動的hamper_no(C(ouple)001),姓名,地址,電話號碼,......并且為了獲得正確的資訊,我寫了一個查詢,首先SELECT ... FROM clientsas c JOIN hampersas h ON ... 為了簡單起見,(第一個)clients表如下所示:
| ID | Hamper_id (索引) 默認 NULL | 姓名 |
|---|---|---|
| 1 | 2 | 美國能源部,約翰 |
| 2 | 無效的 | 美國能源部,簡 |
| 3 | 無效的 | 美國能源部,杰克 |
該hampers表如下所示:
| ID | client_id 不為空 | hamper_no | 創建日期 |
|---|---|---|---|
| 1 | 1 | C001 | 2021-01-01 |
| 2 | 1 | C012 | 2022-01-01 |
| 3 | 2 | F001 | 2022-01-01 |
所需的查詢看起來像這樣。
SELECT h.`id` AS h_id, h.`client_id` AS c_id, IF(YEAR(h.`created_date`)=2022, h.`hamper_no`, NULL) AS hamper_no, YEAR(h.`created_date`) AS h_year, c.`id`, `hamper_id`, `name` FROM `clients` AS c LEFT JOIN `hampers` AS h ON (c.`id` = h.`client_id` AND IF(c.`hamper_id` IS NULL, NULL, c.`hamper_id`) = h.`id`) ORDER BY `name`;
| h_id | c_id | hamper_no | h_year | ID | Hamper_id | 姓名 |
|---|---|---|---|---|---|---|
| 2 | 1 | C012 | 2022 | 1 | 2 | 美國能源部,約翰 |
| 無效的 | 無效的 | 無效的 | 無效的 | 2 | 無效的 | 美國能源部,簡 |
| 無效的 | 無效的 | 無效的 | 無效的 | 3 | 無效的 | 美國能源部,杰克 |
什么時候應該是這樣的:
| h_id | c_id | hamper_no | h_year | ID | Hamper_id | 姓名 |
|---|---|---|---|---|---|---|
| 2 | 1 | C012 | 2022 | 1 | 2 | 美國能源部,約翰 |
| 3 | 2 | F001 | 2022 | 2 | 無效的 | 美國能源部,簡 |
| 無效的 | 無效的 | 無效的 | 無效的 | 3 | 無效的 | 美國能源部,杰克 |
然而問題是c。hamper_id可以為 NULL(與禮籃分離)。我正在尋找與上面類似的結果,我可以在最近的籃子/客戶匹配中獲得不同的結果。這將用于多個客戶端。
如何在不使用 c. hamper_id還是使用條件?
另一個需要注意的是,這是一個客戶端索引,并且可能沒有任何阻礙加入...所以空值對于 JOIN 列是可取的。
uj5u.com熱心網友回復:
基于https://stackoverflow.com/a/2111420/3095210
這是 StackOverflow 上經常出現的每組最大 n 個問題的示例。
SELECT h1.`id` AS h_id,
h1.`client_id` AS c_id,
IF(YEAR(h1.`created_date`) = 2022, h1.`hamper_no`, NULL) AS hamper_no,
YEAR(h1.`created_date`) AS h_year,
c.`id`,
`hamper_id`,
`name`
FROM `clients` AS c
LEFT JOIN `hampers` AS h1
ON c.`id` = h1.`client_id`
LEFT OUTER JOIN `hampers` AS h2
ON (
c.id = h2.client_id
AND
(
h1.created_date < h2.created_date
OR
(
h1.created_date = h2.created_date
AND h1.id < h2.id
)
)
)
WHERE h2.id IS NULL
ORDER BY `name`;
| h_id | c_id | hamper_no | h_year | ID | Hamper_id | 姓名 |
|---|---|---|---|---|---|---|
| 無效的 | 無效的 | 無效的 | 無效的 | 3 | 無效的 | 美國能源部,杰克 |
| 3 | 2 | F001 | 2022 | 2 | 無效的 | “能源部,簡” |
| 2 | 1 | C012 | 2022 | 1 | 2 | “能源部,約翰” |
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/529572.html
下一篇:通過考慮另一個表中的值來檢索資料
