0

我有一些问题要比较我的两个表。通常我会展示我如何解决问题的尝试,但在这里我不知道该怎么做。通常,我在 php.ini 中执行此操作。所以我从 2 个表中获取所有信息,然后进行比较。但我想在 MySQL 中做到这一点。我希望你能帮忙。

第一个表是我的交易表。这是人们在餐馆用卡的地方。

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

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

事务 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

如您所见,预订表中的托比没有使用他的卡(交易表)。我怎样才能让他离开我的餐桌。

4

3 回答 3

0

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

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

User_ID顺便说一句,如果您使用一些而不是name识别人员会更好

于 2013-04-08T11:30:23.030 回答
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
于 2013-04-08T11:32:58.260 回答
0
SELECT * FROM Booking WHERE NAME NOT IN (SELECT NAME FROM Transaction ); 
于 2013-04-08T11:43:53.767 回答