Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Ошибка #1242 - Subquery returns more than 1 row [2]
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » Ошибка #1242 - Subquery returns more than 1 row

Страниц (2): « 1 [2]
 

16. Viper - 29 Ноября, 2014 - 22:41:05 - перейти к сообщению
Можно так

или так
CODE (SQL):
скопировать код в буфер обмена
  1. LIKE '%a%' OR LIKE '%b%' OR LIKE '%c%'
17. flash_br - 29 Ноября, 2014 - 22:50:40 - перейти к сообщению
Да, но для того, что бы делать такие запросы, надо знать значения a, b и c ... вот подзапросом

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT `marka` FROM `marki_tsk_sales` WHERE `tsk` = 'GM'


я и хотел вытащить их ... или я что-то делаю не так?
18. Viper - 29 Ноября, 2014 - 23:38:13 - перейти к сообщению
flash_br не совсем так. Подзапрос вам вернет набор строк, но не подставит их в LIKE или REGEXP.
19. flash_br - 30 Ноября, 2014 - 09:37:24 - перейти к сообщению
Viper, а возможно это как-либо сделать именно средствами mysql? .. на php в цикле на раз-два, вот только это будет очень долго, учитывая, что в таблице, из которой и надо следать выборку, более 30000 строк Не понял
(Добавление)
Кое что получилось

первая имеет такой вид
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. marka   tsk    
  3. Опель   ТСК GM
  4. Шевроле ТСК GM
  5.  


вторая такой
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. marka_am        tsk    
  3.        
  4. Шевроле Нива    ТСК GM
  5. Шевроле Лач     ТСК GM
  6. Опель Корса     ТСК GM
  7. Шевроле Нива    ТСК GM
  8. Шевроле         ТСК GM
  9. Опель Астра     ТСК GM
  10. Шевроле Коб     ТСК GM
  11. Хендай Солярис  ТСК GM
  12. Ниссан Жук      ТСК GM
  13.  


CODE (SQL):
скопировать код в буфер обмена
  1. SELECT `import_sales_2014-11-28`.`marka_am`, `import_sales_2014-11-28`.`tsk` FROM `marki_tsk_sales` INNER JOIN `import_sales_2014-11-28` ON `import_sales_2014-11-28`.`marka_am` LIKE CONCAT ('%', `marki_tsk_sales`.`marka`, '%') AND `import_sales_2014-11-28`.`tsk` = 'ТСК GM' AND `marki_tsk_sales`.`tsk` = 'ТСК GM'


такой запрос выводит, как и положено, 7 записей .... НО

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT `import_sales_2014-11-28`.`marka_am`, `import_sales_2014-11-28`.`tsk` FROM `marki_tsk_sales` INNER JOIN `import_sales_2014-11-28` ON `import_sales_2014-11-28`.`marka_am` NOT LIKE CONCAT ('%', `marki_tsk_sales`.`marka`, '%') AND `import_sales_2014-11-28`.`tsk` = 'ТСК GM' AND `marki_tsk_sales`.`tsk` = 'ТСК GM'


выводит 11 записей(и ни одной верной), хотя надо 5, тех которые не совпадают с записями из первой таблички Огорчение
20. Viper - 30 Ноября, 2014 - 10:32:07 - перейти к сообщению
Можно через процедуры залепить. Но я в этом вам не помощник Огорчение
21. flash_br - 30 Ноября, 2014 - 11:23:36 - перейти к сообщению
Лююююдиииии, хелп плиз ... Огорчение
(Добавление)
Вопрос решён!!!))))

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT import.`marka_am`, import.`tsk` FROM `import_sales_2014-11-28` import WHERE import.`tsk` = 'ТСК GM' AND EXISTS(SELECT marki.`marka` FROM `marki_tsk_sales` marki WHERE marki.`tsk` = 'ТСК GM' AND import.`marka_am` LIKE CONCAT ('%',marki.`marka`, '%') )


этим мы вибираем авто, марки которых перечислены в первой табличке

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT import.`marka_am`, import.`tsk` FROM `import_sales_2014-11-28` import WHERE import.`tsk` = 'ТСК GM' AND NOT EXISTS(SELECT marki.`marka` FROM `marki_tsk_sales` marki WHERE marki.`tsk` = 'ТСК GM' AND import.`marka_am` LIKE CONCAT ('%',marki.`marka`, '%') )


а этот выбирает все авто, марки которых не перечислены в первой табличке Радость Хорошо

 

Powered by ExBB FM 1.0 RC1