首页 > 解决方案 > 从表中获取所有字段并在特定条件下标记一些

问题描述

我有两个数据库表:

第一个表被命名FIELDS并具有以下两列:

  1. FIELD_ID其数据类型为int
  2. FIELD_NAME其数据类型为varchar

第二个表被命名SHIPPINGS并具有以下两列:

  1. FIELD_ID其数据类型为int
  2. SHIPPING_ID其数据类型为int

我需要检索所有字段名称,并标记那些SHIPPING_ID在 table 中具有特定设置的名称SHIPPINGS

例子:

表字段餐桌运输

如果我选择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。我做错什么了?

标签: mysqlsql

解决方案


您可以使用聚合:

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

推荐阅读