2010-02-23 91 views
1

我有2个表需要帮助的加入问题

 

Table 1 

ID Status 
1 D 
2 F 
3 D 


Table 2 

SID ID Approve 
1 1 N 
2 1 Y 
3 1 Y 
4 2 Y 
5 3 Y 

Result:- Should be 
Table 1 (ID, Status) 
3, D 
2,F 

如果不显示1(作为子行的一个有N个在批准列)

我需要一个查询来加入对ID 2个表并查找在批准列中没有N的记录。有没有人有任何线索如何实现这一点?

我试图

 
SELECT * FROM Table1 AS t1 
INNER JOIN Table2 AS t2 
ON t2.id = t1.id 
WHERE t2.Approve != 'N' 

不工作

+0

应该发生什么? – 2010-02-23 15:38:49

+0

对于什么数据库? – 2010-02-23 15:46:18

回答

1

更有效,可能更容易阅读如下:如果一个项目没有批准或不批准

SELECT * FROM Table1 AS t1 
LEFT JOIN Table2 AS t2 
ON t2.id = t1.id 
group by t1.id HAVING sum(t2.approve='Y') = count(t1.id) 
3
SELECT * 
FROM Table1 t1 
WHERE NOT EXISTS(SELECT * FROM Table2 t2 WHERE t2.ID = t1.ID AND t2.Approve = 'N') 
+0

+1,我的工作地点没有! – 2010-02-23 15:48:05

0

请尝试

SELECT distinct t1.* 
FROM Table1 AS t1 
INNER JOIN Table2 AS tyes 
ON tyes.id = t1.id 
AND tyes.approve ='Y' 
LEFT OUTER JOIN Table2 as tno 
ON tno.id = t1.id 
AND tno.approve ='N' 
where tno.sid is null 

它会选择哪个是明确地认可,从不表现出的任何行

0
Select * from table1 where id not in (select id from table2 where approve = 'N') 
0

ID 1仍然被返回,因为表2中还有一个记录,其中批准='Y'代表ID 1. 如果您想排除任何SID为“N”的任何ID,那么您必须使用子查询;大致为:

SELECT t1.ID,T1.Status FROM Table1 AS t1 INNER JOIN Table2 AS t2 ON t2.id = t1.id 
where t1.id NOT IN (select id from Table2 where approve = 'N' and id = t1.id) 

问候,
斯泰恩