完成数据 og 离开 table 其他然后加入连接

complete data og left table other then join connection

我左边的table数据是"Message"

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

我的右table数据是"DeleteMessage"

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

我正在插入 advid 、 id 和活跃的人 (seller/purchaser) 作为 deleteTable

中的 sessionid

现在我想要来自消息 table 的数据,其 seller/purchase id 未作为会话 id 输入删除 table

我正在使用左连接,但它没有保留我的左数据 table

我的查询是

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

根据我的意愿,这个查询应该给我第 24 条消息 table 但没有显示任何内容

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 |
+----+-----------+-------------+

希望我已经正确阅读了你的问题,但这似乎给出了你要求的结果:

SELECT m.id, m.advid, m.seller_id, m.purchase_id, m.delete_status 
  FROM message m
LEFT JOIN deletetable d ON m.id = d.messageid 
WHERE d.messageid IS NULL
AND (purchase_id = '34' OR seller_id = '34')

这会从 message 中检索在 deletetable 中没有条目且 seller_idpurchase_id 为“34”的所有值

使用上述方法从您的样本中得出的结果:

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

注意: 您已将 purchase_idseller_id 括在撇号中,即“34”,所以我假设这是一个字符串字段而不是整数。如果它是一个整数字段,您可以删除它们 - 它们不是必需的,这会使查询速度变慢。