Mysql 从一个表检索所有记录,从另一个表检索特定记录
tbl\U cmpMysql 从一个表检索所有记录,从另一个表检索特定记录,mysql,sql,Mysql,Sql,tbl\U 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_状态为1的字段 我试过这个 SELECT * FROM tbl_cmp JOIN tbl_usr ON tbl_usr.cmp_id = tbl_cmp.usr_id WH
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_状态为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的记录,而不是第一个表中的所有记录
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
请参见左外连接的示例尝试此操作
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
您真正想要的是交叉联接,因为表之间没有联接条件:
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_用户的条件非常明显。在更复杂的查询中,WHERE子句可能与from子句中表格的显示位置完全分离。它只显示cnt_状态为1的记录。要从tbl_用户添加列检索所有记录,与cnt_状态为1的记录相比,如果cnt_状态不是1,则必须显示0以澄清,在join子句中,您在cmd_id和usr_id上进行连接,那么cmp_usr_id是什么?在我看来,您正在尝试比较两个不同的字段,而这两个字段并不相同related@Anu如果你认为这个答案适合你,请接受。看见