У меня сложный запрос 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

http://sqlfiddle.com/

Другие вопросы по тегам