SQL запросы
- Подробности
- Категория: Общие задачи и решения к ним
- Обновлено 13.10.2019
Повторения для product_id в таблице oc_product_to_category
SELECT pc.product_id, pc.category_id, cd.name, pd.name, p.vendor_id
FROM oc_product_to_category pc
JOIN oc_category_description cd USING(category_id)
JOIN oc_product p USING(product_id)
JOIN oc_product_description pd USING(product_id)
WHERE (((pc.product_id) In (SELECT tmp.product_id FROM oc_product_to_category As tmp GROUP BY tmp.product_id HAVING Count(*)>1 )))
ORDER BY pc.product_id
Запрос на поиск повторяющихся значений name в таблице oc_product_description
SELECT p.product_id, pd.name FROM oc_product_description pd JOIN oc_product p using(product_id) WHERE status = 1 AND (pd.name In (SELECT tmp.name FROM oc_product_description As tmp GROUP BY tmp.name HAVING Count(*)>1 )) ORDER BY pd.name ASC
Простой запрос на поиск повторений:
SELECT product_id,COUNT(*) as qty FROM oc_product_image GROUP BY product_id HAVING qty >1
Запрос на обновление данных:
Вариант-1:
UPDATE `table_1` INNER JOIN `table_2` ON `table_1`.`column_1`=`table_2`.`column_2` SET `column_update` ='value' WHERE `column_select` LIKE '%text%'
Вариант-2
UPDATE
`#__table1` as `t1` JOIN `#__table2` USING(`pole1_id`)
JOIN `table3` as `t3` USING(`ple2_id`)
SET
`p`.`pole3`=1
WHERE (`t1`.`pole1_id` = 7 OR `t1`.`pole1_id` = 12) AND `t3`.`pole7`>0
Вариант-3
Обновить поле, а данные взять из двух других полей
UPDATE `table_1` t1 JOIN `table_2` t2 USING(`product_id`)
SET `t1`.`name`=concat('Нирвана ',`t2`.`title`)
WHERE `t2`.`title` LIKE '%нирвана%'
Запрос на выборку:
SELECT `table_1`.`col_1`,`table_2`.`col_2` FROM `table_1` LEFT JOIN `table_2` ON `table_1`.`column_1`=`table_2`.`column_2` WHERE `table_1`.`col_text` LIKE '%text%'
MySQL операторы выбора и условные операторы (IF, CASE, IFNULL, NULLIF)
IF (EXP1, EXP2, EXP3)
Если EXP1 истина, то IF возвращает EXP2, если EXP1=0 или EXP1=NULL, то оператор IF возвращает EXP3.
Оператор выбора CASE
Синтаксис:
CASE value
WHEN [compare-value1] THEN result1
[WHEN [compare-value2] THEN result2]
...
[WHEN [compare-valueN] THEN resultN]
[ELSE default-result]
END
В данном случае value сравнивается с compare-valueX (где X=1..n), если нет совпадений, тогда оператор выбора возвращает default-result, если же инструкция ELSE отсутствует, тогда возвращается NULL.
IFNULL
Синтаксис:
IFNULL (EXP1, EXP2)
если EXP1<>NULL, то IFNULL возвращает EXP1, в противном случае возвращает EXP2.
NULLIF
Синтаксис:
NULLIF(EXP1, EXP2)
если EXP1=EXP2 возвращает NULL, в другом случае – EXP1.