2016-12-29 81 views
0

我需要得到所有的記錄,其中table1.user是table2.userid和table2.country = 8,table2.status = 1選擇記錄,其中ID是在其他表和狀態= 1

這是在這種情況下,我的數據庫

table1的

id user 
-- ---- 
1 12 
2 23 
3 34 
4 32 
5 85 
6 38 

表2

id userid country_id status 
-- ----  -----  ---- 
1 12   5   1 
2 12   8   1 
3 85   8   1 
4 38   8   0   
5 38   7   1 
6 23   8   1 
7 23   4   1 

樣本數據I S HOULD只能獲得ID#3,表2

+1

在此查詢的數據和嘗試是......? –

回答

0

你的意思是

「讓所有的記錄,其中table1.user是table2.userid
table2.country = 8,table2.status = 1?「

如果是這樣的話:

Select * from table1 t1 
Where Exists(Select * from table2 
      Where userId = t1.user 
       and country = 8 
       and status = 1) 
+0

'INNER JOIN'是解決這個問題的更自然的方法。見Adam Boileau的答案。 – nasukkin

+0

同意但這個答案也沒有錯。 – GurV

+0

雖然是意見,但我不同意,在語義上,使用「存在」更接近於如何用自然語言陳述問題,因此更清楚和更容易理解。 「* table1.user在table2中的位置...... *」這些單詞「IN」清楚地轉化爲「存在」。也許,而不是說聯接是更自然的方式...... @nasukkin應該說一個「更多* geeky *的方式......」 –

3

內連接將做的工作只服用與之相匹配的兩個表中記錄。

SELECT * 
FROM table1 t1 
INNER JOIN table2 t2 on t1.user = t2.userid 
WHERE t2.country=8 and t2.status=1 
+0

我試過這個,但它沒有工作,是的,它獲得的記錄,但表2中的ID#2也包括在內。我需要得到的是表2中的id#3。謝謝 :) – codeninja

0

那麼實現這個很簡單,你只需要利用內部的連接。 SQL JOIN子句用於根據兩個或多個表之間的公用字段合併行。

就你而言,INNER JOIN將返回滿足連接條件的table2中的所有行。

對於更詳細的解釋和例子只需訪問此鏈接:http://www.w3schools.com/sql/sql_join.asp

根據你的迴應亞當的辦法「 我試過,但它沒有工作,是它得到的記錄,但該ID#2在表2中也包括在內,我需要得到的是表2中的id#3。謝謝:)「。我改變了我的SQL查詢:

SELECT 
    * 
FROM 
    table1 
INNER JOIN 
table2 
ON 
table1.user = table2.userid 
WHERE 
table2.userid = 85 

我以爲你只想要那個特定的用戶ID的表2中