Php 如何比较表格并找出差异

Php 如何比较表格并找出差异,php,mysql,Php,Mysql,我在比较两张表时遇到了一些问题。通常我会尝试解决一个问题,但在这里我不知道该怎么做。通常,我是用php来做的。因此,我从两个表中获取所有信息,然后进行比较。但是我想在MySQL中实现它。我希望你能帮忙 第一个表是我的事务表。这是人们在餐馆里用名片的地方 第二张桌子是我的预订桌。这是人们在餐馆预订房间的地方 我想比较一下这些表,这样我就可以找到那些没有使用他们预订的表 事务mySQL 从事务中选择t.*,em.*作为t 作为em on的左连接exp_成员(t.cardid-10000000=em.

我在比较两张表时遇到了一些问题。通常我会尝试解决一个问题,但在这里我不知道该怎么做。通常,我是用php来做的。因此,我从两个表中获取所有信息,然后进行比较。但是我想在MySQL中实现它。我希望你能帮忙

第一个表是我的事务表。这是人们在餐馆里用名片的地方

第二张桌子是我的预订桌。这是人们在餐馆预订房间的地方

我想比较一下这些表,这样我就可以找到那些没有使用他们预订的表

事务mySQL

从事务中选择t.*,em.*作为t
作为em on的左连接exp_成员(t.cardid-10000000=em.member_id)
左JOIN exp\u member\u data emd on em.member\u id=emd.member\u id按t.created DESC排序
事务表

Trans_ID TransactionTime名称餐厅
1852 2013-04-08 12:45:21基督教拉坎顿
1851 2013-04-08 12:41:00扎兹·帕肯
预订mySQL

从exp_menucard_booking中选择b.*作为b;
预订表:

ID预订时间姓名人数餐厅
270 2013-04-09 14:45:00基督教徒2拉坎顿
269 2013-04-08 12:17:00托比4拉兹

如您所知,预订表中的托比没有使用他的卡(交易表)。我如何才能让他离开我的表格。

如果您想选择所有已经预订(预订表中有一个条目)但在交易表中没有条目的人,您可以尝试以下查询:

SELECT * 
FROM `Booking` B 
WHERE NOT EXISTS (
    SELECT * 
    FROM `Transaction` T 
    WHERE T.name = B.name
); 

顺便说一句,如果您使用一些
用户ID
而不是
姓名
来识别人员,这将是您选择所有未使用预订的记录的方式。它被称为排除左联接或左排除联接

我不确定这是否会比不存在的地方快,但考虑到它有一个子查询,我认为这会更快。

SELECT emb.*
FROM   exp_menucard_booking emb
LEFT JOIN transactions      t
  ON (
    t.Name       = emb.Name AND
    t.Restaurant = emb.Restaurant
  )
WHERE t.Trans_ID IS NULL
SELECT * FROM Booking WHERE NAME NOT IN (SELECT NAME FROM Transaction );