首页 > 解决方案 > 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”。

我正在尝试这个查询:

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

但它会忽略没有配偶的人。我还想添加没有配偶的人,并把“-”作为配偶的名字。

你能告诉我怎么做吗?

标签: mysqlsql

解决方案


使用左连接并将您的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%' 

推荐阅读