完成数据og左表,然后加入连接

时间:2017-10-05 11:56:48

标签: mysql left-join preserve

我的左表数据是"消息"

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条消息表但没有显示

2 个答案:

答案 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')

这将检索messagedeletetable以及seller_id中没有条目的所有值以及purchase_id| *id* | *advid* | *seller_id* | *purchase_id* | *delete_status* | +------+---------+-------------+---------------+-----------------+ | 24 | 134 | 34 | 6 | No | 所在的位置' 34&# 39;

您的样本使用上述结果:

purchase_id

注意:您已将seller_idSystem.out.println("Value #" + i+1 + " = " + x[i]); // Java cout << "Value # " << i + 1 << " = " << x[i] << endl; // C++ 包含在撇号中,即&#39; 34&#39;,所以我认为这是一个字符串字段而不是整数。如果它是一个Integer字段,你可以删除它们 - 它们不是必需的,它会使查询变慢。