2017-06-05 154 views
0

这可能是一个非常简单的问题,但大多数搜索都是通过合并行(不合并列)或连接它们来完成的。加入两个具有相同ID和合并ID列的表

我想连接ID列上的两个表,但我只希望它返回一个ID列。

实施例:

表1:

ID|Data1|Data2 

表2:

ID|Data3|Data4 

我希望它返回:

ID|Data1|Data2|Data3|Data4 

编辑:

我意识到我可以指定每一列,但实际上有更接近我引入的50列,我宁愿不必指定每一列。有没有办法做到这一点,而没有指定每个列从查询中引出?

我相信自然连接是我需要的,但看到这个错误我得到:在分析过程中发现

SELECT * 
FROM allqachecklists t1 
WHERE t1.IsIncorrect=1 
NATURAL JOIN (SELECT QAID, PMC, SiteName, Submitter, QAer FROM qabin.allqas) t2 

1个错误。

无法识别的关键字。 (附近的“自然”第59位)

+3

请阅读'JOIN' - https://www.techonthenet.com/mysql/joins。php –

+0

我喜欢用于解释连接的维恩图方法:https://blog.codinghorror.com/a-visual-explanation-of-sql-joins/ – xQbert

+1

随着更新:将where子句移到t2之后。 SELECT,FROM,JOINs,WHERE,GROUP BY,HAVING,ORDER BY,LIMIT(并非所有引擎)....每条语句的顺序对编译器都很重要。奇怪的是,它不按以下顺序处理数据:P – xQbert

回答

1

自然联接将允许您选择*从这两个表中加入密钥。然后这两列在结果集中作为ONE返回;前提是两个表中没有其他列的名称相同。

SELECT * 
FROM Table1 A 
NATURAL JOIN Table2 B 

一个例子可以发现:http://rextester.com/FNT36037

MySQL的Docs状态: ...

自然连接,并根据SQL中使用,其中包括外连接的变种,被处理联接:2003标准:

NATURAL连接的冗余列不会出现。 ...

随着您的编辑问题:我们可以修改您的SQL到下面。

SELECT * 
FROM allqachecklists t1 
NATURAL JOIN (SELECT QAID, PMC, SiteName, Submitter, QAer FROM qabin.allqas) t2 
WHERE t1.IsIncorrect=1 
LIMIT 10 

加入then where子句;尽管小心使用外部连接,因为没有所有记录的表上的限制需要放在连接上,或者外部连接的行为类似于内部。

+0

我认为这是接近我想要的,但它不让我使用natural关键字出于某种原因 - 至少不是与子查询 – user1274820

+0

The rextester的例子工作正确吗?所以它必须是一个语法错误,或者你的mysql版本不支持自然连接。 – xQbert

+0

请参阅我的编辑 – user1274820

1

这是你需要

SELECT table1.ID,table1.Data1,table1.Data2,table2.Data3,table2.Data4 
FROM table1 
JOIN table2 ON table1.id=table2.id 
+0

这可以工作,是的,但有更多像50-100列。我宁愿选择它们全部,但合并ID列,而不必指定每一个。 – user1274820

+1

别名表保存输入!并提高可读性。你也可以做'Select a。*,b。*'但是同名的列会被复制。 – xQbert

+0

只要做@xQbert所说的,你将有两个ID列,但它们会是相同的值,所以没关系。 – nacho

0

声音啥子像一个非常简单的内部联接:

select A.ID, data1, data2, data3, data4 from A 
inner join B ON A.ID = B.ID 
+0

有没有办法做到这一点,而不指定每一列?实际上有更多像返回50-100列。 – user1274820

+0

你真的需要返回所有100列吗?很少一次都需要;但如果他们是你可以使用'select *'或'select a。*,b。*' – xQbert

+0

对,但是如果我使用'SELECT *',那么我最终会得到两个ID列 - 是的我需要每一个。此查询起作用是因为他在select语句中只指定了一个ID。 – user1274820

相关问题