我有两个数据库表:
第一个表名为fields
,包含以下两列:
field_id
,其数据类型为int
field_name
,其数据类型为varchar
第二个表名为shippings
,包含以下两列:
field_id
,其数据类型为int
shipping_id
,其数据类型为int
我需要检索所有字段名,并标记那些在表shippings
中设置了某些shipping_id
的字段名。
示例:
如果选择shipping_id=3
,我希望接收以下结构:
s_firstname true
b_lastname false
s_lastname false
我该怎么做? 我尝试了以下SQL查询:
SELECT pf.field_name, ps.shipping_id, IF(ps.shipping_id = 3, "true", "false") AS status
FROM `fields` AS pf LEFT JOIN `shippings` AS ps
ON ps.shipping_id = 3
但它对所有字段都返回true。 我做错了什么?
您可以使用聚合:
select f.*, (s.field_id is not null) as has_3
from fields f left join
shippings s
on f.field_id = s.field_id and s.shipping_id = 3;
注意:这将结果解释为需要布尔值。 如果需要字符串,请使用case
表达式:
select f.*,
(case when s.field_id is not null then 'true' else 'false end) as has_3