Упорядочение запросов SQL и использование group by

#sql #group-by

#sql #группировать по

Вопрос:

 products 
id          product_cat_id         product_type_id         title       ordering
1               42                        1                 "a"            1
2               42                        1                 "b"            2  
3               42                        2                 "c"            1
4               43                        1                 "d"            1

product_cats 
id             title               ordering
1                "n"                   1
2                "b"                   2
3                "h"                   3


product_types 
id             title               ordering
1                "b"                   1
2                "n"                   2
3                "m"                   3
  

Мой SQL-запрос таков:

 SELECT
`products`.`title`,
`product_types`.`title`
FROM
`products`,
`product_cats`,
`product_types`
WHERE
`products`.product_cat_id=42
ORDER BY `product_types`.`ordering`,`products`.`ordering` ASC
  

Но мой SQL-запрос возвращает все заголовки, у которых даже нет идентификатора product_cat_id, равного 42. Я пытался использовать group_by и по-прежнему безуспешно.

Я ищу это:

 product_title         product_type_title
    "a"                        "b"
    "b"                        "b"
    "c"                        "n"
  

Ответ №1:

 SELECT p.title AS product_title, pt.title AS product_type_title
FROM products p
INNER JOIN product_types pt
    ON p.product_type_id = pt.id
WHERE p.product_cat_id = 42
ORDER BY pt.ordering, p.ordering
  

Ответ №2:

 SELECT
    `products`.`title`,
    `product_types`.`title`
FROM
    `products`
INNER JOIN
    `product_types` ON `products`.`product_type_id` = `product_types`.`id`
WHERE
    `products`.product_cat_id=42
ORDER BY
    `product_types`.`ordering`,`products`.`ordering` ASC