Mysql 从表中获取所有字段,并在特定条件下标记一些字段
我有两个数据库表: 第一个表名为Mysql 从表中获取所有字段,并在特定条件下标记一些字段,mysql,sql,Mysql,Sql,我有两个数据库表: 第一个表名为FIELDS,有以下两列: 数据类型为int 数据类型为varchar 第二个表名为SHIPPINGS,有以下两列: 数据类型为int SHIPPING\u ID其数据类型为int 我需要检索所有字段名,并标记那些在表SHIPPINGS中设置了特定SHIPPING\u ID的字段名 例如: 如果我选择SHIPPING\u ID=3,我希望收到以下结构: s_firstname true b_lastname false s_lastname false 我
FIELDS
,有以下两列:
int
varchar
SHIPPINGS
,有以下两列:
int
SHIPPING\u ID
其数据类型为int
SHIPPINGS
中设置了特定SHIPPING\u ID
的字段名
例如:
如果我选择SHIPPING\u ID=3
,我希望收到以下结构:
s_firstname true
b_lastname false
s_lastname false
我该怎么做?我尝试了以下SQL查询:
选择pf.field\u name,ps.shipping\u id,IF(ps.shipping\u id=3,“true”,“false”)作为状态
从'fields'作为pf LEFT连接'shippings'作为ps
在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;
注意:这会将结果解释为需要布尔值。如果需要字符串,请使用大小写
表达式:
select f.*,
(case when s.field_id is not null then 'true' else 'false end) as has_3
您可以使用聚合:
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;
注意:这会将结果解释为需要布尔值。如果需要字符串,请使用大小写
表达式:
select f.*,
(case when s.field_id is not null then 'true' else 'false end) as has_3