提问者:小点点

从表中获取所有字段,并在特定条件下标记某些字段


我有两个数据库表:

第一个表名为fields,包含以下两列:

  1. field_id,其数据类型为int
  2. field_name,其数据类型为varchar

第二个表名为shippings,包含以下两列:

  1. field_id,其数据类型为int
  2. 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。 我做错了什么?


共1个答案

匿名用户

您可以使用聚合:

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