我需要在表1中显示记录,其中序列号不在表2、3、4和5中。
我目前想出一种方法来显示表1的记录,其中序列号不在表2中,
c
我只需要向该查询添加其他表。我尝试添加$query = "SELECT * FROM table1 WHERE serialnumber NOT IN
(
SELECT serialnumber
FROM table2
)";
但这不起作用。请协助。
答案 0 :(得分:1)
添加并集ALL子句:
SELECT * FROM table1 WHERE serialnumber NOT IN
(
SELECT serialnumber FROM table2
UNION ALL
SELECT serialnumber FROM table3
UNION ALL
SELECT serialnumber FROM table4
...
)
答案 1 :(得分:1)
您可以执行更高效 Left Join
而不是子查询。我们可以简单地从table1
到其余表进行左联接(table1
是所有表的左表)。现在,其他表中不存在的serialnumber
个值将在Join之后具有null
个值。因此,我们可以简单地使用Where serialnumber IS NULL
条件进行过滤:
SELECT t1.* FROM table1 AS t1
LEFT JOIN table2 AS t2 ON t2.serialnumber = t1.serialnumber
LEFT JOIN table2 AS t3 ON t3.serialnumber = t1.serialnumber
LEFT JOIN table2 AS t4 ON t4.serialnumber = t1.serialnumber
LEFT JOIN table2 AS t5 ON t5.serialnumber = t1.serialnumber
WHERE t2.serialnumber IS NULL AND
t3.serialnumber IS NULL AND
t4.serialnumber IS NULL AND
t5.serialnumber IS NULL