0

2 つのテーブルを比較するのに問題があります。通常、私は問題を解決する方法を示しますが、ここでは何をすべきかわかりません。通常、私はphpでそれを行います。だから私は2つのテーブルからすべての情報を取得して比較します。しかし、MySQLでやりたいです。お役に立てれば幸いです。

最初のテーブルは、私のトランザクション テーブルです。これは、人々がレストランでカードを使用した場所です。

2 番目のテーブルは私の予約テーブルです。これは、人々がレストランで予約をする場所です.

これらのテーブルを比較したいので、予約を使用していない人を取得できます

トランザクション 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 は自分のカード (トランザクション テーブル) を使用していません。どうすれば彼を私のテーブルから追い出すことができますか.

4

3 に答える 3

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 に答える
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 に答える