2016-12-29 72 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中

相关问题