如何比较tabels并获得差异
问题描述:
我有一些问题来比较我的两个表。通常我会展示我的尝试如何解决问题,但在这里我不知道该怎么做。通常情况下,我使用php。所以我从2个表中获取所有信息,然后进行比较。但我想在MySQL中做到这一点。我希望你能帮忙。如何比较tabels并获得差异
第一张表是我的交易表。这是人们在餐厅用卡的地方。
第二个表是我的预订表。这是人们在餐厅预订的地方。
我想比较这些表,所以我可以得到这些谁没有用自己的预订
交易MySQL的
SELECT t.*, em.* FROM transactions as t
left join exp_members as em on (t.cardid-10000000 = em.member_id)
left JOIN exp_member_data emd on em.member_id = emd.member_id ORDER BY t.created DESC
事务处理表。
Trans_ID TransactionTime Name Restaurant
1852 2013-04-08 12:45:21 Christian La Canton
1851 2013-04-08 12:41:00 Zaz Parken
预订的MySQL
SELECT b.* from exp_menucard_booking as b;
订房表:
ID BookingTime Name NumberOfPeople Restaurant
270 2013-04-09 14:45:00 Christian 2 La Canton
269 2013-04-08 12:17:00 Toby 4 La Raz
你可以SE,托比从预订表没有用他的卡(交易TABEL)。我怎么能把他从我的tabel中拿出来。
答
如果您想选择所有的人,谁已经预订(没有在预订表中的条目),但没有在事务处理表中的条目,你可以尝试此查询:
SELECT *
FROM `Booking` B
WHERE NOT EXISTS (
SELECT *
FROM `Transaction` T
WHERE T.name = B.name
);
BTW它会更好,如果您使用User_ID
而不是name
来标识人员
答
这是您如何选择所有未使用预订的记录。它被称为排除左连接或左排除连接。 http://www.magecorner.com/mysql-joins-explained/
我不知道这是否会比WHERE NOT EXISTS更快,但考虑到有子查询,我认为这是更快。
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);