我的左表数据是"消息"
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
我在deleteTable中插入advid,id和活跃的人(卖家/购买者)作为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 :(得分: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 |
+----+-----------+-------------+
答案 1 :(得分:0)
希望我已经正确地阅读了您的问题,但这看起来可以提供您要求的结果:
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
或| *id* | *advid* | *seller_id* | *purchase_id* | *delete_status* |
+------+---------+-------------+---------------+-----------------+
| 24 | 134 | 34 | 6 | No |
所在的位置' 34&# 39;
您的样本使用上述结果:
purchase_id
注意:您已将seller_id
和System.out.println("Value #" + i+1 + " = " + x[i]); // Java
cout << "Value # " << i + 1 << " = " << x[i] << endl; // C++
包含在撇号中,即&#39; 34&#39;,所以我认为这是一个字符串字段而不是整数。如果它是一个Integer字段,你可以删除它们 - 它们不是必需的,它会使查询变慢。