【发布时间】:2017-11-02 00:49:45
【问题描述】:
我有一个表 message,其中包含 id(主键)、parent_id(自我的外键)、owner_id(创建者用户 ID)和 message(实际消息)列)。
我现在正在尝试检索由特定 owner_id 拥有的所有列,或者具有指向由特定 owner_id 拥有的另一条记录的 parent_id 的所有列。
我已经成功地做到了:
select * from message m1
left join message m2 on m1.id = m2.parent_id
where m1.owner_id = 1;
但是,我得到的结果是这样的(在右侧添加了m2 列):
id parent_id owner_id message id parent_id owner_id message
------------------------------------------------------------------------------------------
1 NULL 1 First message 3 1 2 Third message
1 NULL 1 First message 4 1 2 Fourth message
2 NULL 1 Second message NULL NULL NULL NULL
...当我想要这样的时候(所有唯一匹配列的简单列表,顺序并不重要):
id parent_id owner_id message
------------------------------------------
1 NULL 1 First message
3 1 2 Third message
4 1 2 Fourth message
2 NULL 1 Second message
我意识到我可以使用 union 来做到这一点,但我看不出任何设计联合查询的方法,而不会使其效率极低。
你会如何解决这样的问题?
谢谢。
编辑:
这是我正在使用的表格:
create table message (
id int(11) unsigned auto_increment primary key,
parent_id int(11) unsigned default null,
owner_id int(11) unsigned not null,
message varchar(255) default null,
index (parent_id),
foreign key (parent_id) references message(id) on update cascade on delete cascade
) engine=innodb default charset=utf8;
【问题讨论】:
-
请编辑您的问题并显示您开始使用的数据。