PHP MySQL:不显示表2、3、4和5中的记录

时间:2018-10-17 17:18:22

标签: mysql

我需要在表1中显示记录,其中序列号不在表2、3、4和5中。

我目前想出一种方法来显示表1的记录,其中序列号不在表2中,

c

我只需要向该查询添加其他表。我尝试添加$query = "SELECT * FROM table1 WHERE serialnumber NOT IN ( SELECT serialnumber FROM table2 )"; 但这不起作用。请协助。

2 个答案:

答案 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