有人可以告诉我如何从两个表中选择数据,而不必使用连接吗?
这样的事情:
SELECT t1.*,
t2.*
FROM table1 t1,
table2 t2
我有这两个表,它们具有相同的字段。 IE:table1
包含2011年的数据,而table2
包含2012年的数据。我希望得到所有数据。
所需的结果集可以通过以下方式生成:
(SELECT tr.full_name,tr.headlines,tr.content,tr.stamp,tr.person_key
FROM tbl_transactions tr
JOIN persons p ON p.person_key = tr.person_key
JOIN teams t ON (pp.membership_id = t.id and pp.membership_type = 'teams')
WHERE t.team_key = '')
UNION
(SELECT tr.full_name,tr.headlines,tr.content,tr.stamp,tr.person_key
FROM tbl_transactions_bk_2012 tr
JOIN persons p ON p.person_key = tr.person_key
JOIN teams t ON (pp.membership_id = t.id and pp.membership_type = 'teams')
WHERE t.team_key = '')
并且OP希望看看是否有其他方法可以加快速度(“我尝试在这些查询之间使用UNION
。但查询速度需要0.1887秒。它有点慢。”)
(@ Jetoox:如果这不是您的意图,请编辑您的问题并澄清)。
答案 0 :(得分:24)
只需将连接条件放在WHERE子句中:
SELECT t1.*, t2.*
FROM table1 t1, table2 t2
WHERE t1.id = t2.t1_id
但这是一个内部联接。
查看您的查询时:在这种特殊情况下,tbl_transactions
和tbl_transactions_bk_2012
之间没有关系(即在person_key上加入这些关系是没有意义的,因为这两个表之间没有任何关系(比方说)tbl_transactions和人有关。)
然后,您应该使用UNION
方法。尝试使用JOIN
或FROM xx, yy WHERE xx.id=yy.id
将第一个查询加入第二个查询是毫无意义的,并且不会为您提供所需的结果。
顺便说一句,在将来,将您当前的查询/尝试放在您的帖子中 - 正如您所看到的那样,它会阻止您获得不适合您的问题的答案(正如我的第一次尝试)。
答案 1 :(得分:11)
你想要UNION
。
答案 2 :(得分:2)
select t1.*, t2.* from table1 t1, table2 t2
where t1.fkey = t2.pkey
答案 3 :(得分:2)
select t1.* , t2.*
from t1, t2 where t1.id=t2.id;
答案 4 :(得分:0)
使用UNION查询时,您可能还希望将索引添加到用于加入和过滤的任何列,这将提高性能