Задать вопрос
@IceNix

Запрос MySql. Как составить выборку из первой таблицы по нескольким параметрам из второй?

Добрый день!
К примеру Есть 2 таблицы Первая Frut_table
ID          fruit         
1           Яблоко        
2           Лайм
3           Банан
4           Груша


Вторая Param_Table
ID_P      ID_fruit           ID_Param 
1               1                  10
2               1                  20
3               1                  30
4               2                  20
5               3                  10
6               3                  20
7               4                  10


Хочу сделать выборку из первой таблицы по нескольким параметрам из второй, к примеру соотв. параметрам 10 и 20 , пытался так :
(Разбил на строки для понимания)
SELECT  FT.ID,FT.fruit, PT.ID_P, PT.ID_fruit, PT.ID_Param, 
FT.ID as FT_ID, FT.fruit as FT_fruit, 
PT.ID_P as PT_ID_P,PT.ID_fruit as PT_ID_fruit, PT.ID_Param as PT_ID_Param 
FROM Frut_table FT LEFT JOIN Param_Table PT 
ON (FT.ID=PT.ID_fruit) 
WHERE PT.ID_Param=10 and PT.ID_Param=20


В Моем представлении должен получить это :
ID_fruit             FT_fruit              D_Param
1                      Яблоко                 10
1                      Яблоко                 20
3                      Банан                   10
3                      Банан                   20


Но Получаю Пустую таблицу

Если исправлю запрос на ИЛИ:
WHERE PT.ID_Param=10 or PT.ID_Param=20
Получаю лишние данные из первой таблицы.
Как правильно составить запрос ?
  • Вопрос задан
  • 98 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
@Akina
Сетевой и системный админ, SQL-программист.
SELECT ft.*, pt.*
FROM fruit_table ft
JOIN param_table pt ON ft.id=pt.id_fruit
JOIN ( SELECT id_fruit
       FROM param_table
       WHERE id_param IN (10, 20)
       GROUP BY 1
       HAVING COUNT(DISTINCT id_param) = 2 ) ptx ON pt.id_param = ptx.id_param
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
ThunderCat
@ThunderCat Куратор тега MySQL
{PHP, MySql, HTML, JS, CSS} developer
SELECT  
FT.ID,
FT.fruit, 
PT.ID_P, 
PT.ID_fruit, 
PT.ID_Param, 
FT.ID as FT_ID, 
FT.fruit as FT_fruit, 
PT.ID_P as PT_ID_P,
PT.ID_fruit as PT_ID_fruit, 
PT.ID_Param as PT_ID_Param 

FROM Frut_table FT 
LEFT JOIN Param_Table PT 
ON FT.ID=PT.ID_fruit 
WHERE PT.ID_Param=10 
OR PT.ID_Param=20
какие лишние данные вы получаете?
Ответ написан
shabelski89
@shabelski89
engineer
То что Вы хотите в представлении нужно фильтровать по OR (или IN) и добавлять фильтр по fruit.
SELECT  
FT.ID as ID_fruit, FT.fruit as FT_fruit, PT.ID_Param as D_Param 
FROM Frut_table FT 
LEFT JOIN Param_Table PT ON FT.ID = PT.ID_fruit
WHERE PT.ID_Param IN (10, 20) AND FT.ID IN (1, 3)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы