2013-04-08 124 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);