我有两个数据库表 - table1和table2。对于table1中的一些记录,我在表2中连接了几行。对于他们中的大多数我有3行连接,但对于其中一些我有一个额外的行,其列值如table2.field ='correct'。如果我希望结果只返回table1中的行,其中table2中没有行,其中列值如table2.field ='correct'连接到它们,我如何才能连接table1和table2?计算第二个表中的行数(如果连接的行数为< 4或类似的东西不是一个选项)。
我尝试过类似的事情:
SELECT t1.* FROM table1 t1 LEFT JOIN table2 t2 on t1.id=t2.id_t1 WHERE t2.field IS NULL
但它不起作用。因为我总是在字段列中有值的行。对于连接到t2的t1中的每一行,我在t2中有记录行,其中t2.filed ='name'和t2.field ='type'。我需要t1中没有连接到t2行的行,其中t2.field ='correct'。
答案 0 :(得分:1)
使用NOT IN
SELECT * from t1 WHERE t1.id NOT IN(SELECT id FROM t2 WHERE t2.field = 'correct')
答案 1 :(得分:0)
$sql = "SELECT t1.* FROM table1 t1 CROSS JOIN table2 t2 on t1.id=t2.id_t1 WHERE t2.field IS NULL ";
答案 2 :(得分:0)
SELECT t1。* FROM table1 t1 WHERE NOT EXISTS(SELECT t2。* FROM table2 t2 WHERE t1.id = t2.id_t1 AND t2.field ='correct')