2013-11-21 81 views

回答

0
SELECT * 
FROM table1 
UNION 
SELECT * 
FROM table2 
UNION 
SELECT * 
FROM table3 
ORDER BY id ASC 

您最好指定您需要的列,而不是使用*来减少所需的内存。

+0

我可以这样做:“SELECT COUNT('id')FROM'table1' UNION SELECT COUNT('id')FROM'table2' UNION SELECT COUNT('id')FROM'table3' UNION SELECT COUNT('id')FROM 'table4' UNION SELECT COUNT('id')FROM'table5'“? –

+0

是的,你应该可以做到这一点。这可能会耗费您的桌子的大小。你还会得到5个单独的行,不是一个总和。 –

+0

您可能还想列出您的专栏名称:count(id)as total –

7

你可以像下面这样做

SELECT * FROM (
       SELECT * FROM table1 
       UNION ALL 
       SELECT * FROM table2 
       UNION ALL 
       SELECT * FROM table3 
) as l 
ORDER BY id ASC LIMIT 50 

当你在每个表列数相同的联盟将只工作

+0

您是否尝试过?它显示错误消息:错误代码:1248.每个派生表必须有自己的别名\t 0.015秒 –

+0

感谢它已被修复 –

0

1 -虽然从声明相同的结构假设,所有三个表中有一列id,我们在这些表中用作主键。你需要记录所有这三个特定的ID。

SELECT * 
FROM table1 t1, 
    table2 t2, 
    table3 t3 
WHERE t1.id=t2.id AND t2.id=t3.id 
-- ORDER BY id DESC 
LIMIT 10; 

这会给你相关的特定id所有三个表的前10条记录。

2 -假设你只是结果从三个不同的查询由id

SELECT * FROM table1 
UNION 
SELECT * FROM table2 
UNION 
SELECT * FROM table3 
--ORDER BY id DESC 
LIMIT 10; 
  • 合并为一个语句,并优先考虑他们如果您从最后需要记录取消注释语句-- ORDER BY id DESC假设你有递增的id
  • 如果你需要更多的记录而不仅仅是改变在LIMIT到您需要的号码。
  • 请注意:UNION运算符默认情况下只选择不同的值。要允许重复值,请使用UNION ALL
+0

我认为他正在寻找'UNION' –

+0

可能但不清楚。他试图写的“查询”,对我来说,他似乎希望根据他们的“id”从三张表中找出记录。 – SajjadHashmi

+0

@SajjadHashmi根据您的回答,查询将只显示table1.id = table2.id和table2.id = table3.id中匹配的行。意味着它只会显示匹配的记录。但问题是不同的。所以我不同意你的回答。 –

1

UNION用于将结果从多个SELECT语句合并成一个结果集

(SELECT u.name FROM user as u where u.active=1) UNION (SELECT pu.name FROM productuser as pu WHERE pu.active=1); 
相关问题