@vadimstroganov

Как правильно составить SQL-запрос?

Здравствуйте!

Есть таблица table со столбцами param_1, param_2, param_3

param_3 может быть NULL

Необходимо выбрать все строки, где совпадают значения param_1, причем выводить нужно все найденные строки, при условии что хотя бы в одной param_3 not null

Я попытался составить запрос, но не работает(когда хочу добавить условие на param_3)

SELECT * FROM table WHERE param_1 IN
(SELECT param_1 FROM table GROUP BY param_1 HAVING count(*)>1)
AND (SELECT param_3, FROM table GROUP BY param_3 HAVING count(*)>1)


Помогите пожалуйста

Вот визуально, что я хочу от запроса
table
+----+-----------+-----------+-----------+
| id | param_1 | param_2 | param_3 |
+----+-----------+-----------+-----------+
| 1 | арбуз | розовый | NULL |
| 2 | арбуз | красный | вкусный |
| 3 | арбуз | желтый | NULL |
| 4 | тыква | белая | NULL |
| 5 | тыква | черная | NULL |
| 6 | вишня | розовая | NULL |
| 7 | персик | желтый | NULL |
+----+-----------+-----------+-----------+

После применения запроса должно остаться только это:
+----+-----------+-----------+-----------+
| id | param_1 | param_2 | param_3 |
+----+-----------+-----------+-----------+
| 1 | арбуз | розовый | NULL |
| 2 | арбуз | красный | вкусный |
| 3 | арбуз | желтый | NULL |
+----+-----------+-----------+-----------+
  • Вопрос задан
  • 2364 просмотра
Пригласить эксперта
Ответы на вопрос 2
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
Если количество param_1 удовлетворяющих условию не очень велико (до тысячи) то лучше всего сделать в 2 запроса:
select distinct param_1 from table where param_3 is not null;
select * from table where param_1 IN (явное перечисление значений из прошлого запроса);

Но в принципе вариант Сергей
select * from table where param_1 IN (select param_1 from table where param_3 not null);
тоже будет работать, хоть и медленнее
Ответ написан
Комментировать
@vadimstroganov Автор вопроса
Пишу:
$sql = "select * from table where param_1 IN (select param_3 from table where param_3 not null)";
$r =  mysql_query($sql);
    while($row = mysql_fetch_array($r)) {
         echo $row['id'];    
    }

В итоге ничего не выводит
Warning: mysql_fetch_array() expects parameter 1 to be resource
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы