MySQL / PHP连接表而不总是有公共列

时间:2012-07-13 13:40:01

标签: mysql join

更新 感谢我原来问题的所有答案。 我现在有另一个与这些查询相关的问题。在我加入表之后,我想要搜索NULL结果,按照下面的示例,我想搜索surname = NULL / surname ='',但它返回一个空结果,即使有2个非关联的。

示例查询:

SELECT table1.*,table2.* FROM table1 LEFT JOIN table2 ON table1.id=table2.id WHERE table2.surname=NULL

返回0。

有什么想法吗?我可以理解为什么它会返回0的逻辑,但必须有办法让它工作(?)

原始问题: 我无法在我的问题上找到任何答案,可能是因为我不知道自己应该寻找什么。

我遇到的问题是我希望加入2个表一个共同的指标,但包含公共指标也不存在的记录..

也许我没有意义,但我会尝试用下面的代码解释

表1

id | name
1 | John
2 | Michael
3 | Anna
4 | Sue

表2

id | surname
1 | Doe
2 | Anderson

所以我想要一个输出/绑定表的查询,如下所示:

table1.id | table1.name | table2.id | table2.surname
1 | John | 1 | Doe
2 | Michael | 2 | Anderson
3 | Anna | NULL | NULL
4 | Sue | NULL | NULL

因此,合并有数据的地方,并且不合并这里没有数据(或添加NULL值)。 table2的数据总是比table1少,因此table1可以用作骨骼。 vlookup在Excel中完美地完成此操作,返回找不到值的N / A. 我知道如何使用PHP来实现这一目标,但我尝试加速我的代码,当处理远远高于50k的记录时,我不想单独查询每一行的另一个表列。

我已经尝试了WHERE table1.id = table2.id,但是如果table2.id存在,它只会加入它们,我也尝试了JOIN ON功能,但它也是这样。

请帮忙

3 个答案:

答案 0 :(得分:2)

也许使用LEFT JOIN。

SELECT *
FROM table1
LEFT JOIN table2 ON table1.id = table2.id

请参阅this excellent Jeff Atwood's post

答案 1 :(得分:0)

SELECT * FROM table1 LEFT JOIN ON table2 WHERE table1.id = table2.id;

你试过这个吗?

答案 2 :(得分:0)

LOL。 有时我发现,如果我以别人能够帮助我的方式写出我的问题,我就会明白...... 我一直在寻找这个解决方案超过4个小时,但在写作的时候我开始思考我的早期课程关于LEFT / RIGHT加入的内容......

嗯......抱歉,如果我占用了任何人的时间:)

如果其他人想知道正确的查询是:

SELECT table1.*,table2.* FROM table1 LEFT JOIN table2 ON table1.id=table2.id