如何构造sql语句以仅在两个表

时间:2015-07-26 11:45:35

标签: mysql sql

我有两张桌子。

t1                                 
id name                 
1  foo                  
2  bar 

t2
tid id address
1   1  foss

我可以执行select satement从两个表中的t1中选择id 1。

select * from t1 inner join t2 on (t1.id = 1 and t2.id = 1)

但是,我真正想要的是从t1选择bar,并且只有bar,即使它不存在于t2中。

上面的表格类似于我在项目中所做的工作,类似于同样的问题。

这是我尝试过的。

1. I used left join t1.id = 2 and t2.id = 2 

它列出了t1的所有值,我只想要t1.id = 2。

2.inner join could be used, but since t2.id = 2 is not present.

因此,它不会返回任何内容。

但是如果两个表中都存在id,那么我想要显示来自t1和t2的数据,如果不是仅显示那个id的表t1。

所以,如果我想显示t1.id = 2,我希望答案是使用

select * from t1 join .....

id name  tid   id    address
2  bar   null null    null

2 个答案:

答案 0 :(得分:1)

根据您的预期结果,这是一个简单的左连接:

select * 
from t1 left join t2 
on t1.id = t2.id
where t1.id = 2

答案 1 :(得分:0)

使用left join获取t1的所有元素,即使不存在具有相同id的t2元素也是如此。 然后当t2不存在时,使用null仅获取t1。 最后,您可以添加where过滤器以获取t1的子集(即:id = 2)

SELECT t1.*, t2.*
    FROM t1
    LEFT JOIN t2
        ON t1.id = t2.id
    WHERE t2.id IS NULL
          AND t1.id = 2;