簡體   English   中英

將3個MySQL表加入1個查詢

[英]Joining 3 MySQL tables in to 1 query

我有3個表,用於存儲用戶,可用設置和用戶設置。 用戶表具有標准的用戶資料,例如用戶名,密碼,名稱,日期等。設置表具有所有可用系統設置的列表以及默認值,例如:

settingID   name                  defaultValue
----------------------------------------------
1           push notifications    1
2           profile image         0
3           full name             1
4           distance measure      Miles

用戶設置表具有用戶設置的任何自定義設置,如下所示:

userSettingID    userID    settingID    customValue
----------------------------------------------------------
1                1         1            0
2                1         3            0
3                1         4            KM

我正在嘗試將所有3個表連接在一起的查詢,但是會從設置表中產生所有結果,如果userSettings表中存在匹配項,請使用customValue,否則請使用設置表中的defaultValue。

所以我想產生以下內容:

userID   settingID   userSettingID   name     defaultValue   customValue
---------------------------------------------------------------------------
1        1           1               push...  1              0
null     2           null            profi..  0              null
1        3           2               full...  1              0
1        4           3               dista..  Miles          KM

如您所見,我想要每一個設置記錄,如果有匹配項,則填充userID和/或customValue,否則填充NULL。

我能夠獲得期望的結果,但是一旦添加WHERE userID = x子句,我就只會獲取已設置用戶的記錄。

謝謝

編輯:到目前為止,我的查詢是:

SELECT *
FROM settings
LEFT OUTER JOIN userSettings ON settings.settingID = userSettings.settingID
LEFT OUTER JOIN user ON userSettings.userID = user.userID

要獲取customValue而不是defaultValue如果存在),可以使用coalesce函數並按userid進行過濾,您希望將條件添加到customValue而不是在where子句中使用它(這會使左聯接的行為像是內部聯接)。

我猜你想要這樣的東西:

select 
    us.userID, 
    s.settingID, 
    us.userSettingID,
    s.name, 
    s.defaultValue,
    us.customValue,
    coalesce(us.customValue, s.defaultvalue) as OverriddenValue
from settings s
left join Usersetting us on s.settingID = us.settingID 
left join user u on u.userid = us.userID and u.userID = 1

user是MySQL中不可保留的關鍵字,因此盡管允許使用不帶引號的標識符,但這並不是標識符的好選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM