簡體   English   中英

sql left join:無論條件如何,始終返回左表列

[英]sql left join: always return left table columns, no matter the condition

我有兩個桌子:

帳號設定

該表使用settings.id字段作為FK來存儲用戶自定義設置(下面的設置表具有設置名稱和默認值)

    Column    |           Type           |                           Modifiers
--------------+--------------------------+---------------------------------------------------------------
 id           | integer                  | not null default nextval('account_settings_id_seq'::regclass)
 user_id      | uuid                     | not null
 setting_id   | integer                  | not null
 value        | text                     |

設置:

該表包含所有可用設置。 例如weekly_email,app_notifications,block_user等...它還保留了每個參數的默認值。

     Column     |           Type           |                       Modifiers
----------------+--------------------------+-------------------------------------------------------
 id             | integer                  | not null default nextval('settings_id_seq'::regclass)
 key            | text                     | not null
 frontend_label | text                     |
 default_value  | text                     |

我正在使用屬性包模式設計來存儲我們應用程序的用戶設置! 它將包括通知設置,電子郵件設置等...

即使在其中添加where語句(那里的where語句用於通過user_id查詢account_settings),是否有可能始終返回settings列的查詢?

我正在嘗試獲取帳戶海關設置以及默認值和標簽的左加入settings表。

這是我現在所擁有的:

select account_settings.*, settings.* from settings 
LEFT JOIN account_settings 
ON settings.id = account_settings.id 
where account_settings.user_id = 'UUID_HERE';

但是,這不會返回設置表的值! 如果在account_settings.setting_id列中引用了settings.id列,則只會返回設置值。

刪除您的where條件,並加入條件條件

 select account_settings.*, settings.* from settings 
    LEFT JOIN account_settings 
    ON settings.id = account_settings.id and account_settings.user_id = 'UUID_HERE';

暫無
暫無

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

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