2017-10-05 4 views
0

meine linken Tabellendaten sind „Message“vollständige Daten og Tabelle links andere dann Anschluss verbinden

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 

meine rechten Tabellendaten „DeleteMessage“

id addid  sessionid  messageid  
1  93   19   15 
2  134   34   22 
3  93   28   15 
4  130   19   17 

Ich bin Einfügen advid, id und die aktive Person (Verkäufer/Käufer) als Sitzungs-ID in deleteTable

Jetzt möchte ich Daten aus Nachrichtentabelle, deren Verkäufer/Kauf-ID nicht als Sitzungs-ID in Tabelle löschen

eingegeben wird

i links bin mit beitreten, aber seine meine Daten von links Tabelle nicht bewahren

meine Anfrage ist

select * from message 
left join deletetable 
on message.id = deletetable.messageid 
where sessionid !='34' 
AND (purchase_id='34' OR seller_id='34') 

nach meinem Wunsch, diese Abfrage sollte gibt mir Eintrag Nr 24 die Nachrichtentabelle aber nichts ist auftauchend

+0

nein es gibt mir alle Einträge von 34 von der linken Tabelle – ramii

Antwort

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

ich danke Ihnen, es ist perfekt – ramii

0

Hoffentlich habe ich Ihre Frage richtig gelesen, aber das sieht das Ergebnis Sie für Fragen geben:

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

Dies ruft alle Werte von message, die in deletetable keinen Eintrag haben und wo auch die seller_id oder purchase_id ist ‚34‘

Ergebnis aus Ihrer Probe der oben mit:

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

Hinweis: Sie haben Ihre purchase_id und seller_id in Apostrophen umgeben, dh '34', so habe ich angenommen, dass dies ein String-Feld ist, anstatt Integer. Wenn es ein Integer-Feld ist, können Sie sie entfernen - sie sind nicht notwendig und machen die Abfrage etwas langsamer.

+0

Ich kann die Sitzungs-ID hier nicht sehen – Strawberry

Verwandte Themen