我有一个具有这种结构的表:
CREATE TABLE `models` (
`id` bigint(10) unsigned not null auto_increment,
`parent_id` bigint(10) unsigned default 0,
`date_sent` datetime not null,
`content` text not null,
PRIMARY KEY(`id`)
) ENGINE=InnoDB;
我想为给定的id选择id和内容, 但如果parent_id不为null,我想要父级的内容,而不是子级。
我尝试了这个,什么都不返回:
select id, content from models
where id = if(parent_id is null, 90, (select parent_id from models where id=90))
;
答案 0 :(得分:2)
我会用LEFT JOIN解决这个问题
SELECT m1.id, COALESCE(m2.content,m1.content) as content
FROM models AS m1 LEFT JOIN models AS m2 ON (m2.id = m1.parent_id)
WHERE m1.id = 90;
这样,如果有父母,它将被加入,并将使用内容,但如果没有找到父母,那么它将使用当前行'内容'
答案 1 :(得分:1)
一个简单的LEFT OUTER JOIN,然后使用COALESCE获取父内容或普通内容的第一个非空字段。
SELECT a.id, COALESCE(b.content, a.content)
FROM models a
LEFT OUTER JOIN models b
ON a.parent_id = b.id
WHERE a.id = 90
答案 2 :(得分:0)
这样做:
select id, content from models
where (parent_id is null and id = 90)
or id = parent_id