我有2张桌子,假设Main_Table
和Favourite_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',则“喜欢的”列值为yes
,否则,如果找不到或与电子邮件不匹配,则返回{{ 1}}
在他的时间我正在尝试这样。
'no'
MySQL说:
#1054-“字段列表”中的未知列“ Favourite_Table._category”
在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';
中,仅Main_Table
上没有_email
列
我认为我需要添加Favourite_Table
命令,但是如何添加?
答案 0 :(得分:0)
您可以尝试使用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
子句中,因此不在范围内。您也许可以使用两个表之间的左联接来修复它,但我更喜欢在这里存在。
答案 1 :(得分:0)
您需要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';