2010-07-06 38 views
1

我在寻找一个查询来从两个不同的表中选择行,保持列名相同(我在这里找到一个结果用于从两个不同的表中进行选择,但它合并了列名以获得更简单的查询)。我需要保留原始列名,但在新的更大的表中存在两个不同的表。两个表格之间没有重叠列。如何在MySQL中选择两个不重叠的表格

的图画,想象:

alt text

所以,我怎么能做到这一点?我知道查询可能会相当令人费解,但任何半体面可能会比我目前的尝试更好:

SELECT t1.* , t2.* 
FROM table1 t1 RIGHT OUTER JOIN table2 t2 
ON r.someColumn1 = rc.someColumn2 
UNION 
SELECT t1.* , t2.* 
FROM table1 t1 LEFT OUTER JOIN table2 t2 
ON r.someColumn1 = rc.someColumn2 

这并不工作,但只只要不存在的情况下someColumn1 = someColumn2 - 当然,这很容易发生。

任何帮助表示赞赏,我很抱歉,可能是一个非常愚蠢的问题,聪明的答案是“不要这样做,你这个傻瓜!”。

+1

您正在寻找'FULL OUTER JOIN',但是它尚未在MySQL中实现。它看起来最好的答案是Adam Ruth。 – Michas 2010-07-06 10:57:04

回答

5

你可以设置你的加入准则,永远不会匹配:

SELECT t1.* , t2.* 
FROM table1 t1 RIGHT OUTER JOIN table2 t2 
ON 1 = 0 
UNION 
SELECT t1.* , t2.* 
FROM table1 t1 LEFT OUTER JOIN table2 t2 
ON 1 = 0 

我没有MySQL的测试,但它在SQL Server的工作原理。

+0

它的工作原理;我只是在MySQL中测试它。 – 2010-07-06 10:32:00

+0

谢谢,Lèse,它是标准的SQL,但我总是喜欢仔细检查。 – 2010-07-06 10:33:13

+1

我用'ON FALSE'测试了它。有用。 – Michas 2010-07-06 10:43:11

3

编辑:我的第一个答案是错误的:

select * from Events 
    left join GroupList on ID=null 
union 
select Events.*,GroupList.* from GroupList 
    left join Events on GID=null 

在表中的上述GID和ID是KeyFields中。

+0

这会给你一个笛卡尔连接,它会给你table1中的每一行匹配table2中的每一行。 – 2010-07-06 10:18:02

+0

的确,亚当是对的。我正在寻找两张独特的桌子,而不是笛卡儿。抱歉。 – Stephen 2010-07-06 10:21:11

+0

你说得对 - 我不明白。现在我已经编辑它,它与@Adam给出的答案几乎相同,所以他得到了我的+1。 – 2010-07-06 10:33:10