从一个表中检索所有记录,从另一个表中检索特定记录

时间:2012-08-10 13:40:59

标签: mysql sql

tbl_cmp

usr_id | cmp_name | usr_fname |cmp_addr

tbl_usr

cmp_usr_id |cmp_id | cmp_usr_fname | cnt_status 

我正在尝试从两个查询检索数据: 从tbl_cmp中检索所有数据 但 仅从tbl_usr中检索cnt_status = 1

的字段

我试过这个

SELECT *
FROM tbl_cmp
JOIN tbl_usr ON tbl_usr.cmp_id = tbl_cmp.usr_id
WHERE tbl_usr.cnt_status =1

但它只显示cnt_status = 1的记录而不是第一张表中的所有记录

3 个答案:

答案 0 :(得分:0)

使用 LEFT OUTER JOIN

SELECT *
FROM tbl_users
Left outer JOIN tbl_cmp_user 
ON tbl_cmp_user.cmp_id = tbl_users.usr_id
and tbl_cmp_user.cnt_status =1

请参阅左外连接here

的示例

答案 1 :(得分:0)

试试这个

SELECT * FROM tbl_users LEFT JOIN tbl_cmp_user 
ON tbl_cmp_user.cmp_id = tbl_users.usr_id 
AND tbl_cmp_user.cnt_status =1

答案 2 :(得分:0)

您真正想要的是交叉连接,因为表之间没有连接条件:

select c.*, u.*
from tbl_cmp c cross join
     (select *
      from tbl_users u
      where u.cnt_status = 1
     ) u

您可以在没有子查询的情况下表达:

select c.*, u.*
from tbl_cmp c cross join
     tbl_users u
where u.cnt_status = 1

我更喜欢子查询版本,因为它使tbl_users上的条件非常明显。在更复杂的查询中,WHERE子句可能与表在FROM子句中出现的位置完全分开。