У меня сложный запрос MySQL SELECT, который включает в себя акции и пороговые облигации
У меня есть база данных MySQL, которая содержит две таблицы, связанные с внешним ключом:
MatPr(id, Designation, threshold_stock)
А также
MvtStock_MatPr(id, Qte_Mvt, Qte_Tot,idMatPr)
То, что я хочу, чтобы получить последний Qte_tot, Обозначение, threshold_stock где threshold_stock>qte_tot Я попытался этот код и не работал:
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
Вот пример набора данных:
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
BY id, idMatPr;
| id | idMatPr | Dsignation | threshold_stock | Qte_Tot |
| 1 | 1 | бакра | 120 | 10 |
| 2 | 2 | молния | 130 | 20 |
| 3 | 1 | бакра | 120 | 30 |
| 7 | 2 | молния | 130 | 50 |
4 ряда в наборе (0,00 сек)
mysql> SELECT * FROM MatPr;
| id | Обозначение | threshold_stock |
| 1 | бакра | 120 |
| 2 | молния | 130 |
2 ряда в наборе (0,00 сек)
mysql> SELECT * FROM MvtStock_MatPr;
| id | DateMvt | Qte_Mvt | Qte_Tot | idMatPr |
| 1 | 2016-01-01 | 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 рядов в наборе (0,00 сек)
То, что я хотел бы получить это:
| id | idMatPr | Dsignation | threshold_stock | Qte_Tot
| 3 | 1 | бакра | 120 | 30 |
| 7 | 2 | молния | 130 | 50 | +----+---------+--------+-------+---------+
Спасибо за ваш вклад
3 ответа
Попробуйте этот запрос:
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
Используйте запрос ниже
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
Я не уверен, что полностью понимаю, в чем ваша проблема: выбирает ли он только одну строку из набора результатов? Если да, решает ли подзапрос вашу проблему?
SELECT *
FROM MatPr
WHERE ID = (
SELECT idMatPr
FROM MvtStock_MatPr, MatPr
WHERE MatPr.id = MvtStock_MatPr.idMatPr
AND threshold_stock > Qte_Tot
LIMIT 1
)
Если вы хотите выбрать только строки из MatPr
это работает для вас?
SELECT MatPr.*
FROM MvtStock_MatPr, MatPr
WHERE MatPr.id = MvtStock_MatPr.idMatPr
AND threshold_stock > Qte_Tot