2012-08-10 103 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子句出現的位置完全分離。