Mysql 完成左表中的数据,然后连接

Mysql 完成左表中的数据,然后连接,mysql,left-join,preserve,Mysql,Left Join,Preserve,我的左表数据是“消息” 我右侧的表数据是“DeleteMessage” 我正在删除表中插入advid、id和活动人员(卖方/买方)作为会话id 现在,我需要消息表中的数据,该表的卖方/买方id未作为会话id输入到delete表中 我正在使用左联接,但它并没有保留左表中的数据 我的问题是 select * from message left join deletetable on message.id = deletetable.messageid where sessionid !='34' A

我的左表数据是“消息”

我右侧的表数据是“DeleteMessage”

我正在删除表中插入advid、id和活动人员(卖方/买方)作为会话id

现在,我需要消息表中的数据,该表的卖方/买方id未作为会话id输入到delete表中

我正在使用左联接,但它并没有保留左表中的数据

我的问题是

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

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

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

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')
这将从
消息
中检索所有值,这些值在
删除表
中没有条目,并且
卖方id
采购id
为“34”

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

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

注意:您将您的
采购id
卖家id
用撇号括起来,即“34”,因此我假设这是一个字符串字段,而不是整数。如果是整数字段,您可以删除它们-它们不是必需的,这会使查询速度稍慢。

否,它将提供左表中34的所有条目。我在此处看不到会话id
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')
| *id* | *advid* | *seller_id* | *purchase_id* | *delete_status* |
+------+---------+-------------+---------------+-----------------+
| 24   | 134     | 34          | 6             | No              |