2016-06-16 4 views
0

Я имею базу данных MySQL, который содержит две таблицы, связанные с внешним ключом:У меня есть оспаривая MySQL SELECT, запрос, который включает в себя акции и порог bondary

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 

по идентификатору, 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 | + ---- + --------- + -------- + ------- + --------- +

Спасибо за ваш вклад

+0

Пожалуйста [редактировать] свой вопрос название на что-то значимое. Это должно быть то, что описывает реальную проблему, с которой вы сталкиваетесь, или вопрос, который вы задаете, и должен быть достаточно конкретным, чтобы иметь смысл для будущего читателя, который видит его в результатах поиска. * У меня сложный запрос * абсолютно бесполезен в этом отношении - каждый может сказать, что их запрос * сложный *, независимо от того, действительно ли это или нет. Ваш вопрос не слишком ясен; некоторые примеры данных из обеих таблиц и результат, который вы хотели бы получить из этих образцов данных с вашим запросом, помогли бы. –

ответ

0

Используйте приведенный ниже запрос

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

Не полезно, что дает тот же результат, который я получаю: 4rows, и я хочу получить только 2 строки, как я спросил. –

0

Я не уверен, что я полностью следовать тому, что ваша проблема: является ли он выбрать только одну строку из результирующего набора? Если да, то подзапрос исправляет вашу проблему?

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/#!9/d4ef50/2

+0

Нет. Я хочу получить все MatPr, у которых есть условие threshold_stock> Qte_Tot –

0

Попробуйте этот запрос:

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

Или вы можете заказать MvtStock_MatPr.id desc, поскольку столбец DateMvt не является datetime и может повторяться более чем в одной строке –

+0

Это было так близко ... Это запрос получает две строки, но ненужные: строки с MvtStoc_MatPr.id 1 и 2. Что я хочу получить, это строки с MvtStock_MatPr.id 3 и 7. –

+0

Я только что попробовал, и он получает идентификаторы 3 и 7 MvtStock_MatPr.id, но столбец переименован в 'id' вместо MvtStock_MatPr.id, можете ли вы вставить результаты, чтобы увидеть, какие данные я неправильно вставил в таблицы? –