我有下表:
過濾器
| 過濾器_1 | 過濾器_2 | 過濾器_3 |
|---|---|---|
| 測驗 | 其他 | 價值 |
| 測驗 | 空值 | 空值 |
| 測驗 | 隨機的 | 隨機的 |
我還有一個這樣的:
形式
| ID | 姓名 | 標題 |
|---|---|---|
| 測驗 | 其他 | 價值 |
| 測驗 | 例子 | 空值 |
現在的想法是如果過濾器不為空,則通過它們匹配的欄位連接兩個表。
例如,第一個過濾器應該匹配第一個表單,第二個過濾器應該匹配兩個表單,第三個應該不匹配。
我嘗試了以下方法:
SELECT COALESCE(filter_1, id), COALESCE(filter_2, name), COALESCE(filter_3, title)
FROM FORM
JOIN FILTER on (id = filter_1 or name = filter_2 or title = filter_3)
不幸的是,如果其中一個欄位匹配并且如果我更改為并且如果所有欄位都匹配,我們將匹配。
uj5u.com熱心網友回復:
您可以將條件添加到連接的ON子句中,以匹配值或匹配或NULL:
SELECT fi.*
FROM Filters fi
INNER JOIN Forms fo
ON fi.filter_1 = fo.id AND
(fo.name = fi.filter_2 OR fi.filter_2 IS NULL) AND
(fo.title = fi.filter_3 OR fi.filter_3 IS NULL);
演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/426890.html
標籤:sql PostgreSQL
上一篇:日期轉換為Postgresql
