2017-10-05 1 views
0

mes données de table de gauche est "Message"données complètes Og gauche autre table, puis rejoindre la connexion

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 

mes données de table droite est "DeleteMessage"

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

je suis INSERTION DE advid, id et personne active (vendeur/acheteur) comme sessionid dans deleteTable

Maintenant, je veux des données de la table de message dont le vendeur/achat ID n'est pas enterd comme ID de session dans la table de suppression

J'utilise jointure gauche mais son est pas de conserver mes données de la table gauche

ma requête est

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

selon mon souhait cette requête devrait me donne l'entrée n ° 24 du tableau des messages, mais rien est montrant

+0

non il me donne toutes les entrées de 34 de la table gauche – ramii

Répondre

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

merci c'est parfait – ramii

0

Espérons que j'ai lu votre question, mais cela semble donner le résultat que vous demandez:

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

Cette récupère toutes les valeurs de message qui ne disposent pas d'une entrée dans deletetable et aussi où le seller_id ou purchase_id est « 34 »

Résultat de votre échantillon à l'aide ci-dessus:

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

Note: Vous avez entouré vos purchase_id et seller_id en apostrophes, c'est-à-dire '34', donc j'ai supposé que c'est un champ String plutôt qu'Entier. Si c'est un champ entier, vous pouvez les supprimer - ils ne sont pas nécessaires et cela rend la requête un peu plus lente.

+0

Je ne vois pas l'identifiant de session ici – Strawberry