mysql - MySql 查询:另一列的可选连接
问题描述
我正在寻找加入另一列“姿势名称”的选项,以防一个人有配偶。
这是表声明:
CREATE TABLE `people` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL,
`surname` varchar(20) NOT NULL,
`relativeto` int(11) DEFAULT NULL,
`relation` varchar(1) NOT NULL DEFAULT 'n',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
relation
可以是“n”或“s”。
- 如果 's' 则另一行保存该人的配偶,而 relativeto 保存配偶的 ID。
- 如果为“n”,则该人没有配偶
我正在尝试这个查询:
SELECT T1.*,T2.name AS spouse
FROM `people` T1, `people` T2
WHERE T1.surname LIKE 'AB%'
AND T1.relation='s'
AND T1.relativeto=T2.id
但它会忽略没有配偶的人。我还想添加没有配偶的人,并把“-”作为配偶的名字。
你能告诉我怎么做吗?
解决方案
使用左连接并将您的T1.relation='s'
条件放入ON Clause
SELECT T1.*,coalesce(T2.name,'-') AS spouse
FROM `people` T1 left join `people` T2
on T1.relativeto=T2.id AND T1.relation='s'
where T1.surname LIKE 'AB%'
推荐阅读
- mysql - 为什么在 MySql 查询中负数(例如 ~~-1)返回 184467440737...
- r - 基于 R 中的列和前一行值的新列值
- javascript - 节点 js 在 TCP.onStreamRead (internal/stream_base_commons.js:209:20) 处读取 ECONNRESET | 网络套接字
- typescript - 如何将参数的类型设置为 Vue 组件
- c - 内存中指针的范围
- azure-integration-runtime - 自托管集成运行时在接收器上失败,但自动解析(默认)集成运行时成功
- excel - 无法从类 Range 分配属性 Locked
- javascript - 在 Webapp 中获取用户输入并在 HTML 中显示一些行
- python - Plotly Dash NameError:未定义名称“app”
- c# - 使用 C# windows 应用程序表单创建 DSN