2017-10-05 6 views
0

私の左の表のデータは、「メッセージ」完全なデータは、接続に参加し、他のテーブルを左OG

id  advid  seller_id  purchase _id  delete_status 

15  93   28   19     yes 
22  134   34   19     yes 
25  168   15   19     No 
17  130   19   2     yes 
24  134   34   6     No 

私の右の表のデータが「DeleteMessage」である

id addid  sessionid  messageid  
1  93   19   15 
2  134   34   22 
3  93   28   15 
4  130   19   17 

私はadvid、idと挿入していますdeleteTableのsessionidとしてアクティブな人物(売り手/購入者)

ここで、削除テーブル

にセッションIDとして売り手/購入IDが入力されていないメッセージテーブルのデータが必要です私は左を使用しています

が参加したが、左の表から自分のデータを保存していないその私のクエリは

select * from message 
left join deletetable 
on message.id = deletetable.messageid 
where sessionid !='34' 
AND (purchase_id='34' OR seller_id='34') 

ある

私の願いによると、このクエリはするべき私にメッセージテーブルのエントリがない24を与えるが、何もありません

+0

いいえ私は左のテーブルから34のすべてのエントリを与えています – ramii

答えて

1
DROP TABLE IF EXISTS message; 

CREATE TABLE message 
(id INT NOT NULL PRIMARY KEY 
,seller_id INT NOT NULL 
,purchase_id INT NOT NULL 
); 

INSERT INTO message VALUES 
(15,28,19), 
(22,34,19), 
(25,15,19), 
(17,19,2), 
(24,34,6); 

DROP TABLE IF EXISTS deletemessage; 

CREATE TABLE deletemessage 
(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY 
,sessionid INT NOT NULL 
,messageid INT NOT NULL 
); 

INSERT INTO deletemessage VALUES 
(1,19,15), 
(2,34,22), 
(3,28,15), 
(4,19,17); 

SELECT x.* 
    FROM message x 
    LEFT 
    JOIN deletemessage y 
    ON y.messageid = x.id 
    AND y.sessionid = 34 
WHERE 34 IN (x.seller_id,x.purchase_id) 
    AND y.id IS NULL; 
+----+-----------+-------------+ 
| id | seller_id | purchase_id | 
+----+-----------+-------------+ 
| 24 |  34 |   6 | 
+----+-----------+-------------+ 
+0

これは完璧ですありがとうございました – ramii

0

を示すうまくいけば、私が正しくあなたの質問を読んだが、これはあなたが求めている結果を与えることになります。

このはseller_idpurchase_idがどこにあるかも​​3210にエントリを持っていないmessageからすべての値を取得し、あなたのサンプルから「34」

結果上記の使用:

| *id* | *advid* | *seller_id* | *purchase_id* | *delete_status* | 
+------+---------+-------------+---------------+-----------------+ 
| 24 | 134  | 34   | 6    | No    | 

注:purchase_idseller_idをアポストロフィで囲んだので、これは整数ではなく文字列フィールドであると想定しています。 Integerフィールドの場合、それらを削除することができます。これらは必要ではなく、クエリが少し遅くなります。

+0

私はここでセッションIDを見ることができません – Strawberry

関連する問題