给定两个表:(显示关键问题的大大简化/简化的示例)
app_data表示可以订阅的应用程序
id app_name
1 apple
2 berry
3 cherry
app_sub将电子邮件地址映射到应用程序
id email
1 alex
2 bob
2 coby
我想从单用户的角度生成一个表,显示当前用户订阅了哪些应用程序,而不是。
例如,从亚历克斯的角度来看,我想得到:
期望表
id app_name is_subscribed
1 apple true
2 berry false
3 cherry false
以下纯 SQL 查询似乎没问题:
select id, app_name, email
from app_data left join ( select *
from app_sub
where email='alex'
) as subquery
on app_name.id=app_data.id;
但是,我很难让它在 dbix-class 中工作。
或者,我尝试像这样消除子查询:
$app_data_resultset->search( { -or => [ { email => 'alex' },
{ email => undef },
],
},
{ select => [ qw{ me.id
me.app_name
app_sub.email
},
],
as => [ qw{ id
app_name
email
},
],
join => 'app_sub',
);
但是,这(现在可以预期)会导致以下结果(在将 0 和 null 都视为 false 之后):
坏表
id app_name is_subscribed
1 apple true
3 cherry false
由于 'bob' 和 'coby' 订阅了 id 2,因此 where 子句完全消除了第二个 id。
任何帮助将不胜感激!