Mysql 完成左表中的数据,然后连接
我的左表数据是“消息” 我右侧的表数据是“DeleteMessage” 我正在删除表中插入advid、id和活动人员(卖方/买方)作为会话id 现在,我需要消息表中的数据,该表的卖方/买方id未作为会话id输入到delete表中 我正在使用左联接,但它并没有保留左表中的数据 我的问题是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
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 |