我正在嘗試使用一些相同的欄位和一些獨特的欄位制作 2 個不同表的 SQL 視圖。
兩個表都將它們的 userId 作為它們的 PK
Table Male
-------- ------- ------- --------- ------------
| UserId | Fname | Lname | Contact | DOB |
-------- ------- ------- --------- ------------
| abcd1 | Jack | Smith | 1234555 | 12/12/1954 |
| abcd2 | John | White | 1234333 | 01/09/1960 |
| abcd3 | David | King | 1234444 | 23/01/1973 |
-------- ------- ------- --------- ------------
Table Female
-------- ------- ------- ------------------- ------------
| UserId | Fname | Lname | Email | Age |
-------- ------- ------- ------------------- ------------
| abcd1 | Sally | Smith | sally@example.com | 40 |
| abcd2 | Lily | White | lily@example.com | 35 |
| abcd3 | Susan | King | susan@example.com | 55 |
-------- ------- ------- ------------------- ------------
我想創建這 2 個表的視圖,該視圖回傳具有以下 2 個條件的查詢:
SELECT * FROM view_members WHERE UserId = 'abcd1';
-------------- ------- ------- --------- ------------ ------------------- ------------
| UserId | Fname | Lname | Contact | DOB | Email | Age |
-------------- ------- ------- --------- ------------ ------------------- ------------
| male_abcd1 | Jack | Smith | 1234555 | 12/12/1954 | NULL | NULL |
-------------- ------- ------- --------- ------------ ------------------- ------------
| female_abcd1 | Sally | Smith | NULL | NULL | sally@example.com | 40 |
-------------- ------- ------- --------- ------------ ------------------- ------------
兩個表中 UserId 的主鍵仍為識別符號,回傳的值將附加相應的表名。對于每個表唯一的值,對于從其他表中提取的結果,將回傳 null。
有沒有可能的解決方案?要在我的 Create View 陳述句中添加任何邏輯以使其作業?
uj5u.com熱心網友回復:
使用聯合方法:
SELECT CONCAT('male_', UserId) AS UserId, Fname, Lname, Contact, DOB, NULL AS Email, Age
FROM Male
UNION ALL
SELECT CONCAT('female_', UserId), Fname, Lname, NULL, NULL, Email, Age
FROM Female;
請注意,NULL當某個表中不存在特定列時,我們在 select 陳述句中使用占位符。例如,在第一個選擇中,我們NULL用作電子郵件的占位符,因為該Male表沒有此列。
uj5u.com熱心網友回復:
只有在查詢后才能重新定義列的值的視圖。您可以將視圖定義為聯合。只是硬連接性別價值。
CREATE VIEW your_view AS
SELECT UserId, Gender AS 'Male', Fname, Lname, Contact, DOB, NULL AS Email, Age FROM Male
UNION ALL
SELECT UserId, Gender AS 'Female', Fname, Lname, NULL, NULL, Email, Age FROM Female;
現在,您可以從 SELECT 陳述句中獲取男性和女性行,或者通過添加 Gender 條件僅獲取女性或男性版本。
假設男性和女性行與您的示例具有相同的 ID:
SELECT * FROM your_view WHERE UserId = 'abcd1' AND Gender = 'Male'
如果您想要男性和女性行,請忽略性別。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/367613.html
上一篇:計算SQL中新增陽性病例的增加
