0

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 的记录,而不是第一个表中的所有记录

4

3 回答 3

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 子句中出现的位置完全分开。

于 2012-08-10T14:14:28.113 回答
0

使用左外连接

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

请参阅此处的左外连接示例

于 2012-08-10T13:43:37.547 回答
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
于 2012-08-10T13:44:21.933 回答