[英]SQL create virtual column depending on another table condition
我有 2 個表,可以說Main_Table
和Favourite_Table
。
我想要的是從Main_Table
選擇所有Main_Table
並在最后創建虛擬列_liked
,值為yes
或no
。
如果 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.