2012-08-10 81 views
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不是全部从第一台记录

+0

只是为了说明,在join子句中你加入了cmd_id和usr_id,那么cmp_usr_id是什么?在我看来,你试图比较两个不相关的字段 – wterbeek 2012-08-10 13:47:28

回答

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 
+0

谢谢你哥们它的工作! – Anu 2012-08-10 14:00:16

+0

@Anu如果您认为适合您,请接受此答案。 请参阅[接受答案:它是如何工作的?](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235) – hims056 2012-08-11 07:30:47

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

+0

它只显示有cnt_status = 1的记录 想要从tbl_user检索所有记录 如果cnt_status不是cnt_status = 1,那么加上那些cnt_status = 1的人即可 1它必须显示0 – Anu 2012-08-10 13:45:54

+0

@Anu:plz现在检查 – 2012-08-10 13:47:26

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