求助mysql多表查询问题

hbgzg3006 2012-05-25 05:46:14
我有一张表A 主键id(自增)
令外有表B、C、D 他们的第一列都是A的主键ID的值(A的主键ID只可能在B、C、D的一个中出现)

我现在想实现这样的功能找出A的前10条记录和匹配到的表明。

非常感谢。
...全文
166 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
hbgzg3006 2012-05-28
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

SQL code
select a.id, (select id from b) as bid,
(select id from c) as cid,
(select id from d) as did
from A
limit 10


b,c,d 表中创建基于ID的索引。
[/Quote]

谢谢,创建索引貌似也有点慢。。。这得union多少数据啊。
hbgzg3006 2012-05-28
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

引用 7 楼 的回复:

如果B C D 每张表都有10万级别的数据,我发现效率很差啊。有没有效率比较高的,感谢各位大虾。

和BCD没关系 因为你取的是A的记录
[/Quote]
但是我要join B C D啊 难道也没关系吗?
rucypli 2012-05-28
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

如果B C D 每张表都有10万级别的数据,我发现效率很差啊。有没有效率比较高的,感谢各位大虾。
[/Quote]
和BCD没关系 因为你取的是A的记录
ACMAIN_CHM 2012-05-28
  • 打赏
  • 举报
回复
select a.id, (select id from b) as bid,
(select id from c) as cid,
(select id from d) as did
from A
limit 10


b,c,d 表中创建基于ID的索引。
hbgzg3006 2012-05-28
  • 打赏
  • 举报
回复
如果B C D 每张表都有10万级别的数据,我发现效率很差啊。有没有效率比较高的,感谢各位大虾。
Rotel-刘志东 2012-05-28
  • 打赏
  • 举报
回复
select a.id,u.t
from A left join (
select 'B' as t,id from B
union all
select 'C' as t,id from B
union all
select 'D' as t,id from B
) u on a.id=u.id order by a1.id desc limit 10

WWWWA 2012-05-28
  • 打赏
  • 举报
回复
贴建表及插入记录的SQL,及要求结果出来看看


select a1.id,b1.bz from A a1 left join (
select 'B' as bm,id from b
union all
select 'C' as bm,id from c
union all
select 'D' as bm,id from d
) b1 on a1.id=b1.id order by a1.id desc limit 10

or

select a1.id,b1.bz from A a1 left join (
select 'B' as bm,id from b
union all
select 'C' as bm,id from c
union all
select 'D' as bm,id from d
) b1 on a1.id=b1.id where b1.id is not null order by a1.id desc limit 10
WWWWA 2012-05-28
  • 打赏
  • 举报
回复
贴建表及插入记录的SQL,及要求结果出来看看

在4表的ID上建立索引

SELECT a.*,CASE WHEN b.id IS NOT NULL THEN 'B'
WHEN c.id IS NOT NULL THEN 'C'
ELSE 'D' END AS bm
FROM a
LEFT JOIN b ON a.id=b.id
LEFT JOIN c ON a.id=c.id
LEFT JOIN d ON a.id=d.id
ORDER BY a.id DESC LIMIT 10
回南山种豆 2012-05-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

SQL code
select a.id,u.t
from A left join (
select 'B' as t,id from B
union all
select 'C' as t,id from B
union all
select 'D' as t,id from B
) u on a.id=u.id
[/Quote]
+
ACMAIN_CHM 2012-05-25
  • 打赏
  • 举报
回复
select a.id,u.t
from A left join (
select 'B' as t,id from B
union all
select 'C' as t,id from B
union all
select 'D' as t,id from B
) u on a.id=u.id
shuiping567541 2012-05-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

SQL code
select a.*,if(b.aid is not null,'B',if(c.aid is not null,'C','D')) as tableName
from a
left join b on a.id=b.aid
left join c on a.id=c.aid
left join d on a.id=d.aid
order by a.id
limit 10;……
[/Quote]

个人愚见 if(b.aid is not null,'B',if(c.aid is not null,'C','D')) 这句应该可以不要 但我也是小菜
百年树人 2012-05-25
  • 打赏
  • 举报
回复
select a.*,if(b.aid is not null,'B',if(c.aid is not null,'C','D')) as tableName
from a
left join b on a.id=b.aid
left join c on a.id=c.aid
left join d on a.id=d.aid
order by a.id
limit 10;

56,687

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧