2013-04-08 129 views
0

我有一些问题来比较我的两个表。通常我会展示我的尝试如何解决问题,但在这里我不知道该怎么做。通常情况下,我使用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中拿出来。

回答

0

如果您想选择所有的人,谁已经预订(没有在预订表中的条目),但没有在事务处理表中的条目,你可以尝试此查询:

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

BTW它会更好,如果您使用User_ID而不是name来标识人员

0

这是您如何选择所有未使用预订的记录。它被称为排除左连接或左排除连接。 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 
0
SELECT * FROM Booking WHERE NAME NOT IN (SELECT NAME FROM Transaction);