2013-11-22 104 views
0

我有两个数据库表 - table1和table2。对于table1中的一些记录,我在table2中有几行连接。对于他们中的大多数我有3行连接,但对于其中一些我有一个额外的行像列table2.field ='正确'的值。我如何连接table1和table2,如果我想结果只返回table1中的行,其中table2中没有行,并且列值如table2.field ='correct'连接到它们?计算第二个表中的行数(如果连接的行数为< 4或类似的东西不是一个选项)。从第二个表中缺少匹配行的表加入表

我想是这样的:

SELECT t1.* FROM table1 t1 LEFT JOIN table2 t2 on t1.id=t2.id_t1 WHERE t2.field IS NULL 

,但它没有工作OFC。因为我总是在字段列中有值的行。对于连接到t2的t1中的每一行,我都有t2中的记录行,其中t2.filed ='name'和t2.field ='type'。我需要t1中没有连接到t2的行,其中t2.field ='correct'。

回答

1

使用NOT IN

SELECT * from t1 WHERE t1.id NOT IN(SELECT id FROM t2 WHERE t2.field = 'correct') 
+0

这没有帮助。我不需要有匹配的行。 –

0
$sql = "SELECT t1.* FROM table1 t1 CROSS JOIN table2 t2 on t1.id=t2.id_t1 WHERE t2.field IS NULL "; 
+0

问题是t2.field永远不会为null,它始终有2或3行有值的行。像t2.field ='name'和t2.field ='type'一样。我需要t1中没有记录的行连接到表2中的行,其中t2.field ='correct'。 –

0

SELECT T1。* FROM表1 WHERE T1 NOT EXISTS(SELECT T2 * FROM表2 T 2,其中t1.id = t2.id_t1 AND t2.field =“正确')

相关问题