2016-06-16 2 views
0

J'ai une base MySQL qui contient deux tables liées à une clé étrangère:J'ai un défi requête MySQL SELECT qui implique stock et seuil bondary

MatPr(id, Designation, threshold_stock)

Et

MvtStock_MatPr(id, Qte_Mvt, Qte_Tot,idMatPr)

Ce que je veux, c'est obtenir le dernier Qte_tot, Désignation, threshold_stock où threshold_stock> qte_tot J'ai essayé ce code et je n'ai pas travaillé:

SELECT MvtStock_MatPr.id,idMatPr, Nom, threshold_stock, Qte_Tot 
FROM MvtStock_MatPr, MatPr 
WHERE MatPr.id=MvtStock_MatPr.idMatPr AND threshold_stock>Qte_Tot 

Voici ensemble des données Exemple:

mysql> SELECT MvtStock_MatPr.id,idMatPr, Designation, threshold_stock, Qte_Tot FROM MvtStock_MatPr, MatPr WHERE MatPr.id=MvtStock_MatPr.idMatPr AND threshold_stock>Qte_Tot ORDER 

PAR id, idMatPr;

| id | idMatPr | Dsignation | threshold_stock | Qte_Tot |

| 1 | 1 | bakra | 120 | 10 |

| 2 | 2 | fermeture à glissière | 130 | 20 |

| 3 | 1 | bakra | 120 | 30 |

| 7 | 2 | fermeture à glissière | 130 | 50 |

4 rows in set (0.00 sec)

mysql> SELECT * FROM MatPr; 

| id | Désignation | threshold_stock |

| 1 | bakra | 120 |

| 2 | fermeture à glissière | 130 |

2 lignes set (0.00 sec)

mysql> SELECT * FROM MvtStock_MatPr; 

| id | DateMvt | Qte_Mvt | Qte_Tot | idMatPr |

| 1 | 01/01/2016 | 10 | 10 | 1 |

| 2 | 2016-02-02 | 20 | 20 | 2 |

| 3 | 2016-03-03 | 20 | 30 | 1 |

| 4 | 2016-03-03 | 100 | 130 | 1 |

| 5 | 2016-03-03 | 50 | 180 | 1 |

| 6 | 2016-03-03 | 20 | 200 | 1 |

| 7 | 2016-03-05 | 30 | 50 | 2 |

7 lignes dans l'ensemble (0.00 sec)

Ce que je voudrais faire est:

| id | idMatPr | Dsignation | threshold_stock | Qte_Tot

| 3 | 1 | bakra | 120 | 30 |

| 7 | 2 | fermeture à glissière | 130 | 50 | + ---- + --------- + -------- + ------- + --------- +

Merci pour vos contributions

+0

S'il vous plaît [modifier] le titre de votre question à quelque chose de significatif. Ce devrait être quelque chose qui décrit le problème réel auquel vous faites face ou la question que vous posez, et qui devrait être suffisamment précis pour avoir un sens pour un futur lecteur qui le voit dans un résultat de recherche. * J'ai une requête compliquée * est totalement inutile à cet égard - tout le monde peut dire que leur requête est * compliquée *, qu'elle soit réelle ou non. Votre question n'est pas trop claire non plus; quelques exemples de données provenant des deux tables et la sortie que vous souhaitez obtenir à partir de ces exemples de données avec votre requête aideraient. –

Répondre

0

Utilisez Je ne suis pas sûr que je suis tout à fait la requête ci-dessous

Select m1.id,m1.idMatpr,m.threshold_stock,m.Qte_Tot 
From MvtStock_Matpr m1 join Matpr m 
On m1.idMatPr=m.id and m.threshold_stock>m1.Qte_Tot 
+0

Pas utile, cela produit le même résultat que je reçois: 4rows et je veux obtenir seulement 2 lignes comme je l'ai demandé. –

0

ce que votre problème est: est-il juste à sélectionner une ligne à partir d'un jeu de résultats? Si oui, une sous-requête corrige-t-elle votre problème?

SELECT * 
FROM MatPr 
WHERE ID = (
    SELECT idMatPr 
    FROM MvtStock_MatPr, MatPr 
    WHERE MatPr.id = MvtStock_MatPr.idMatPr 
    AND threshold_stock > Qte_Tot 
    LIMIT 1 
) 

Si vous souhaitez sélectionner uniquement les lignes de MatPr, est-ce pour vous?

SELECT MatPr.* 
FROM MvtStock_MatPr, MatPr 
WHERE MatPr.id = MvtStock_MatPr.idMatPr 
    AND threshold_stock > Qte_Tot 

http://sqlfiddle.com/#!9/d4ef50/2

+0

Non Iwant pour obtenir tous les MatPr qui ont la condition threshold_stock> Qte_Tot –

0

Essayez cette requête:

select * from 
    (SELECT MvtStock_MatPr.id,idMatPr,Designation, threshold_stock, Qte_Tot 
    FROM MvtStock_MatPr join MatPr 
    on MatPr.id=MvtStock_MatPr.idMatPr 
    where threshold_stock>Qte_Tot 
    order by DateMvt desc 
    ) T 
group by T.idMatPr 
+0

Ou vous pouvez commander par MvtStock_MatPr.id desc comme la colonne DateMvt n'est pas datetime et peut être répétée dans plus d'une rangée –

+0

C'était si proche ... requête obtient deux lignes mais les inutiles: lignes avec MvtStoc_MatPr.id 1 et 2. Ce que je veux obtenir est les lignes avec MvtStock_MatPr.id 3 et 7. –

+0

Je viens de l'essayer et il obtient les ID MvtStock_MatPr.id 3 et 7, mais la colonne est renommée en 'id' au lieu de MvtStock_MatPr.id, pouvez-vous coller les résultats pour voir quelles données j'ai incorrectement inséré dans les tables? –