2017-10-05 1 views
0

내 왼쪽 테이블 데이터는 "메시지"완전한 데이터는 연결에 가입 다른 테이블을 왼쪽 OG

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 

내가 advid, ID와 삽입하고 활성 사용자 (판매자/구매자)를 deleteTable의 sessionid로 사용하십시오.

이제 삭제 테이블

에 판매자 ID/구매 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

아니요 왼쪽 테이블에서 34의 모든 항목을 제공하고 있습니다 – ramii

답변

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 | 
+----+-----------+-------------+ 
+0

완벽 해 주셔서 감사합니다. – ramii

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

이는 seller_id 또는 purchase_id이고 또한 deletetable에 항목이하지 않는 message의 모든 값을 검색 샘플에서 '34'

결과 위의 사용 :

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

참고 :purchase_idseller_id을 어포 스트로피로 묶었습니다. 즉, '34'입니다. 따라서 정수가 아닌 String 필드라고 가정했습니다. 정수 필드 인 경우 제거 할 수 있습니다. 필요하지 않으며 쿼리가 약간 느려집니다.

+0

세션 ID를 볼 수 없습니다. – Strawberry