比较我的两张桌子时遇到一些问题。通常我会展示我如何解决问题,但在这里我不知道该怎么做。通常,我在php中这样做。所以我从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
正如您所见,来自Booking表的Toby没有使用他的卡(交易表)。我怎么能让他离开我的桌子呢。
答案 0 :(得分:0)
如果您想选择已预订的所有人(预订表中有条目)但在交易表中没有条目,您可以尝试此查询:
SELECT *
FROM `Booking` B
WHERE NOT EXISTS (
SELECT *
FROM `Transaction` T
WHERE T.name = B.name
);
顺便说一下,如果您使用一些User_ID
代替name
来识别这些人,那会更好
答案 1 :(得分: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
答案 2 :(得分:0)
SELECT * FROM Booking WHERE NAME NOT IN (SELECT NAME FROM Transaction );