Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何检查两个数据库表是否缺少信息_Php_Mysql - Fatal编程技术网

Php 如何检查两个数据库表是否缺少信息

Php 如何检查两个数据库表是否缺少信息,php,mysql,Php,Mysql,我有两个表,都有fname和lname列。我如何编写查询来检查其中一个表是否缺少另一个表中不存在的记录 以下是表格及其列 tbl_client -fname -lname tbl_lease -fname -lname 我需要不断检查tbl_租约,看看记录是否与表tbl_client匹配,如果不匹配,我将能够向我显示它。感谢一个简单的方法是在where子句中使用not exists谓词: select tbl_client.fname, tbl_client.lname, 'missing

我有两个表,都有fname和lname列。我如何编写查询来检查其中一个表是否缺少另一个表中不存在的记录

以下是表格及其列

tbl_client
-fname
-lname

tbl_lease
-fname
-lname

我需要不断检查tbl_租约,看看记录是否与表tbl_client匹配,如果不匹配,我将能够向我显示它。感谢一个简单的方法是在
where
子句中使用
not exists
谓词:

select tbl_client.fname, tbl_client.lname, 'missing from lease' as missingfrom
    from tbl_client
    where not exists
       (select 1 from tbl_lease where tbl_lease.fname=tbl_client.fname
        and tbl_lease.lname=tbl_client.lname)
union
select tbl_lease.fname, tbl_lease.lname, 'missing from client' as missingfrom
    from tbl_lease
    where not exists
       (select 1 from tbl_client where tbl_lease.fname=tbl_client.fname
        and tbl_lease.lname=tbl_client.lname)

或者执行一个完整的外部联接并检查哪些表的记录为空,但这可能不那么简单,而且可能比不存在的

获取tbl\u租约中的所有记录,其中fname在tbl\u客户端中不存在:

 select tl.* from tbl_lease tl
    left join tbl_client tc on tl.fname = tc.fname 
 where tc.fname is null;
另一方面,tbl_客户机中存在记录,而tbl_租约中不存在fname

 select tc.* from tbl_client tc
   left join tbl_lease tl on tc.fname = tl.fname 
  where tl.fname is null;

如果两个表中的至少一个名称上都没有匹配的索引,则可能会遇到一些在任何情况下都可能非常慢的表扫描。在tbl_客户机上有一个索引(lname,fname),在tbl_租约上有一个索引(lname,fname),查询应该很快。哇,谢谢,我不知道这个。当使用not exists时,它是检查paranthesis中的内容是否不存在,还是检查not existIt之前的选择,以确保括号中的子查询不返回任何记录。在这种情况下,是一个相关子查询,但是
存在
不存在
相关子查询可以使用索引运行得非常快,因为RDBMS只需要执行索引查找。