完成数据 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_id
或 purchase_id
为“34”的所有值
使用上述方法从您的样本中得出的结果:
| *id* | *advid* | *seller_id* | *purchase_id* | *delete_status* |
+------+---------+-------------+---------------+-----------------+
| 24 | 134 | 34 | 6 | No |
注意: 您已将 purchase_id
和 seller_id
括在撇号中,即“34”,所以我假设这是一个字符串字段而不是整数。如果它是一个整数字段,您可以删除它们 - 它们不是必需的,这会使查询速度变慢。
我左边的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_id
或 purchase_id
为“34”的所有值
使用上述方法从您的样本中得出的结果:
| *id* | *advid* | *seller_id* | *purchase_id* | *delete_status* |
+------+---------+-------------+---------------+-----------------+
| 24 | 134 | 34 | 6 | No |
注意: 您已将 purchase_id
和 seller_id
括在撇号中,即“34”,所以我假设这是一个字符串字段而不是整数。如果它是一个整数字段,您可以删除它们 - 它们不是必需的,这会使查询速度变慢。