Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да избирате от две таблици в MySQL, дори ако не всички редове в едната таблица имат кореспонденти в другата?

За да направите това, имате нужда от външно съединение. Между другото, начинът, по който пишете заявката си с имплицитно присъединяване, е остарял и вече не се препоръчва. Препоръчва се използването на ключовата дума JOIN. Това също така улеснява промяната на вътрешно съединение във външно.

FROM categories AS sc
LEFT JOIN products AS s
ON s.ownerid=sc.id

За да върнете 0 вместо NULL, използвайте IFNULL(..., 0) . Цялата заявка става:

SELECT
    sc.*,
    IFNULL(MIN(s.price), 0) AS minp,
    IFNULL(MAX(s.price), 0) AS maxp
FROM categories AS sc
LEFT JOIN products AS s
ON s.ownerid = sc.id
GROUP BY sc.id

Може също да помислите дали би било по-добре да върнете NULL по подразбиране вместо 0 за категории, които нямат продукти.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Поправете отказан достъп за потребител 'root'@'localhost' за phpMyAdmin

  2. Грешка при импортиране на Python MySQLdb - Mac 10.6

  3. YEAR() Примери – MySQL

  4. Разлики между MySql и MySqli в PHP

  5. Намиране на всички родители в таблицата на mysql с единична заявка (рекурсивна заявка)