SQL запросы

Повторения для 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.