0
我這裏有3個表即:條件語句
person (
id int PRIMARY KEY
,fullname text)
phonenumber (
id int PRIMARY KEY
,personid int REFERENCES person(id)
,phonetypeid REFERENCES phonetype(id)
,number text)
phonetype (
id int PRIMARY KEY
,phonetype text) -- phonetype 'Home', 'Cell', 'Fax', 'Main' etc.
每個person
可以存儲在phonenumber
表多個號碼,並有在phonetype
表不同PHONETYPE:
| fullname | number | phonetype |
| Erwin Macale | (671)632-3909 | Home |
| Erwin Macale | (671)632-3909 | Cell |
| Erwin Macale | (671)632-3909 | Main |
我只想顯示具有以下條件的每個人的電話號碼:
- 如果他具有「家庭」電話號碼顯示屏,則只有家庭類型放棄所有其他電話號碼號碼。
- 如果他沒有「家庭」號碼,則只顯示他的「單元」號碼,然後丟棄他的所有其他(「傳真」,「主」等)號碼。
- 一個人可以沒有電話號碼。
我創建了包含fullname, number, phonetype
命名testable
然後從這裏我分開所有PHONETYPE號碼,如一個臨時表:
CREATE TEMP TABLE home AS SELECT * FROM testable WHERE phonetype ILIKE 'home';
CREATE TEMP TABLE cell AS SELECT * FROM testable WHERE phonetype ilike 'cell';
CREATE TEMP TABLE main AS SELECT * FROM testable WHERE phonetype ilike 'main';
CREATE TEMP TABLE fax AS SELECT * FROM testable WHERE phonetype ilike 'fax';
CREATE TEMP TABLE work AS SELECT * FROM testable WHERE phonetype ilike 'work';
CREATE TEMP TABLE neighbor AS SELECT * FROM testable WHERE phonetype ilike 'neighbor';
CREATE TEMP TABLE other AS SELECT * FROM testable WHERE phonetype ilike 'other';
CREATE TEMP TABLE unknown AS SELECT * FROM testable WHERE phonetype ilike 'unknown';
,然後創建另一組,我認爲滿足上述條件的臨時表:
CREATE TEMP TABLE all_cell AS SELECT * FROM cell EXCEPT SELECT * FROM home;
CREATE TEMP TABLE all_main AS (SELECT * FROM main) EXCEPT (SELECT * FROM home UNION SELECT * FROM cell);
CREATE TEMP TABLE all_fax AS (SELECT * FROM fax) EXCEPT (SELECT * FROM home UNION SELECT * FROM cell UNION SELECT * FROM main);
CREATE TEMP TABLE all_work AS (SELECT * FROM work) EXCEPT (SELECT * FROM home UNION SELECT * FROM cell UNION SELECT * FROM main UNION SELECT * FROM fax);
CREATE TEMP TABLE all_neighbor AS (SELECT * FROM neighbor) EXCEPT (SELECT * FROM home UNION SELECT * FROM cell UNION SELECT * FROM main UNION SELECT * FROM fax UNION SELECT * FROM work);
CREATE TEMP TABLE all_other AS (SELECT * FROM other) EXCEPT (SELECT * FROM home UNION SELECT * FROM cell UNION SELECT * FROM main UNION SELECT * FROM fax UNION SELECT * FROM work UNION SELECT * FROM neighbor);
CREATE TEMP TABLE all_unknown AS (SELECT * FROM unknown) EXCEPT (SELECT * FROM home UNION SELECT * FROM cell UNION SELECT * FROM main UNION SELECT * FROM fax UNION SELECT * FROM work UNION SELECT * FROM neighbor UNION SELECT * FROM other);
最後選擇最後一組臨時表的所有工會:
SELECT fullname, number, phonetype FROM (
SELECT * FROM home
UNION
SELECT * FROM all_cell
UNION
SELECT * FROM all_main
UNION
SELECT * FROM all_fax
UNION
SELECT * FROM all_work
UNION
SELECT * FROM all_neighbor
UNION
SELECT * FROM all_other
UNION
SELECT * FROM all_unknown
) AS t1
ORDER BY t1.fullname, t1.phonetype;
步驟是否滿足我的條件? 我仍然從一個人獲得不同的phonetype值。