SQL根据另一个表条件创建虚拟列

时间:2019-12-12 05:16:48

标签: sql phpmyadmin mariadb

我有2张桌子,假设Main_TableFavourite_Table

我想要的是从Main_Table中选择所有内容,并在末尾使用值_likedyes创建虚拟列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命令,但是如何添加?

2 个答案:

答案 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 joinFavourite_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';