mysql - 从表中获取所有字段并在特定条件下标记一些
问题描述
我有两个数据库表:
第一个表被命名FIELDS
并具有以下两列:
FIELD_ID
其数据类型为int
FIELD_NAME
其数据类型为varchar
第二个表被命名SHIPPINGS
并具有以下两列:
FIELD_ID
其数据类型为int
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。我做错什么了?
解决方案
您可以使用聚合:
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
推荐阅读
- php - 从模型中获取数据时为 foreach 提供的参数无效
- html - 在 about:blank 中更改背景颜色
- javascript - Emberjs 监视从父组件传递的变量更改?
- php - 通过使用 php 和 javascript 选择一个选项来更新数据库表
- android - 如何用文本框中的值替换文档路径?
- angular - 如何测试 Angular 中的所有订阅都取消订阅了吗?
- html - 带有 HTML 元素的 PostgreSQL 中的 CONCAT()
- java - 特定类的 Windows jvm 上没有 Spring AOP 代理
- r - 当有大量数据[超过一百万行]时,改进 R 中的循环以提高时间效率
- c# - 从附加文本中删除第一行