加入返回空列?

时间:2012-05-08 23:39:08

标签: php mysql join

我从两个表中选择了一个MYSQL查询。第二个表可能不一定具有与第一个表匹配的连接ID。我们以这两个为例:

++++++++++++++++++
table: t1
column: id
column: test_id
column: info

table t2
column: t2id
column: test_id
column: extra_info
++++++++++++++++++

我将以下这些行插入到表中(这只是伪目前):

insert into t1 values (1, 4, "asd")
insert into t1 values (2, 25, "dfg")
insert into t2 values (1, 25, "123")

现在我的目标是将两个表连接在一起,但我遇到了连接问题。如果第二个表(t2)似乎没有匹配的行,它会使原始表中的连接列为NULL吗?它为什么这样做?以下是一个示例查询:

SELECT * FROM `t1` LEFT JOIN `t2` ON (`t1.test_id` = `t2.test_id`) WHERE `t1.id` = 1;

现在我绝对没有问题,如果他们匹配,但由于某种原因,如果没有存在的行,那么来自t1的test_id被设置为NULL ...我的目标是加入这两个表,如果有什么加入。 编辑:如果没有任何东西要加入,那么我想通过将所有t2列设置为NULL或只返回t1数据来从t1返回数据。我是否需要执行子查询?如果是的话会是什么?谢谢:))

4 个答案:

答案 0 :(得分:6)

使用INNER JOIN

SELECT * FROM `t1` 
INNER JOIN `t2` ON (`t1.test_id` = `t2.test_id`) 
WHERE `t1.id` = 1; 

关于JOIN类型的文档:http://dev.mysql.com/doc/refman/5.7/en/join.html

答案 1 :(得分:1)

这是LEFT JOIN的定义。即使只有连接的左半部分匹配,它也会返回行,如果需要,它会在右侧填充NULL

如果您只想获得相应右侧的行,请仅使用JOIN代替LEFT JOIN

答案 2 :(得分:1)

加入时,建议不要使用“SELECT *”,特别是当您在多个表中具有类似命名的列时,因为这会引入歧义,并且您可能无法获得预期的结果。我建议改为:

SELECT t1.*, t2.t2id, t2.extra_info 
FROM `t1` 
    LEFT JOIN `t2` 
    ON (`t1.test_id` = `t2.test_id`)
WHERE `t1.id` = 1;

答案 3 :(得分:0)

有多种不同类型的连接。我想你想要的是“内连接”,其中只返回具有匹配的行。查看http://www.w3schools.com/sql/sql_join.asp

相关问题