我有几张桌子,名字如下:
table_2012_12
table_2012_10
table_2012_07
两者具有相同的结构:
id
order_id
account_id
我知道我必须执行这些查询:
SELECT * FROM table_2012_12 where id=1
SELECT * FROM table_2012_12 where id=5
SELECT * FROM table_2012_10 where id=1
SELECT * FROM table_2012_07 where id=22
使用单个查询的最佳(表演)方法是什么?
答案 0 :(得分:1)
UNION
运算符可以做到这一点。请参阅:http://dev.mysql.com/doc/refman/5.6/en/union.html
SELECT * FROM table_2012_12 where id=1
UNION ALL
SELECT * FROM table_2012_12 where id=5
UNION ALL
SELECT * FROM table_2012_10 where id=1
UNION ALL
SELECT * FROM table_2012_07 where id=22
通常,您不应只写UNION
而是UNION ALL
。 UNION
具有加入查询结果以及过滤掉任何重复行的效果。 UNION ALL
将简单地合并查询结果,并保留所有行。这样效率更高
答案 1 :(得分:1)
鉴于此结构,您无法进行任何优化,但您可以进行union查询:
SELECT * FROM table_2012_12 where id=1
UNION SELECT * FROM table_2012_12 where id=5
UNION SELECT * FROM table_2012_10 where id=1
UNION SELECT * FROM table_2012_07 where id=22
UNION
会自动删除重复项。
答案 2 :(得分:1)
SELECT * FROM table_2012_12 where id=1 OR id=5
UNION ALL SELECT * FROM table_2012_10 where id=1
UNION ALL SELECT * FROM table_2012_07 where id=22