选择parent_id是否为null

时间:2014-07-22 12:30:43

标签: mysql

我有一个具有这种结构的表:

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))
;

3 个答案:

答案 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