簡體   English   中英

SQL根據另一個表條件創建虛擬列

[英]SQL create virtual column depending on another table condition

我有 2 個表,可以說Main_TableFavourite_Table

我想要的是從Main_Table選擇所有Main_Table並在最后創建虛擬列_liked ,值為yesno

如果 Main_Table._category = Favourite_Table._category AND Main_Table._name = Favourite_Table._name AND Favourite_Table._email = 'someone_email' 則 Liked 列值為yes如果未找到或與電子郵件不匹配則返回'no'

在他那個時候,我正在嘗試這樣..

SELECT *, (case when 
    Main_Table._category=Favourite_Table._category AND 
    Main_Table._name=Favourite_Table._name AND 
    Favourite_Table._email='email@email.com' then 'Yes' else 'No' end) as _liked 

    FROM Main_Table WHERE _category='Pop';

MySQL 說:

#1054-“字段列表”中的未知列“Favourite_Table._category”

Main_Table ,只有Favourite_Table沒有_email

我想我需要添加JOIN命令,但如何添加?

您可以嘗試使用EXISTS實現此邏輯:

SELECT mt.*,
    CASE WHEN EXISTS (SELECT 1 FROM Favourite_table ft
                      WHERE mt._category = ft._category AND
                            mt._name = ft._name AND
                            ft._email = 'email@email.com')
         THEN 'Yes' ELSE 'No' END AS _liked
FROM Main_Table mt
WHERE
    mt._category = 'Pop';

直接錯誤的原因是Favourite_table實際上沒有出現在任何FROM子句中,所以它超出了范圍。 您可以使用兩個表之間的左連接來修復它,但我更喜歡這里存在。

您需要left join您的Favourite_Table表。

select t1.*
    , (case when coalesce(t1._category, '') != '' and 
             t2._email='email@email.com' 
        then 'Yes' else 'No' end) as _liked 
from Main_Table t1 
left join Favourite_Table t2 on t1._category = t2._category and t1._name=t2._name
where t1._category='Pop';

暫無
暫無

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

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