Ответы пользователя по тегу MySQL
  • Как найти или подставить название по id из соседней ячейки?

    @baitarakhov
    https://www.db-fiddle.com/f/c3xvexoxBGts5dfQDAZ2Jb/0
    -- вариант №1
    SELECT t.id, t.link_id, l.name 
    FROM table1 t, link l
    where t.link_id = l.id;
    
    -- вариант №2
    SELECT t.id, t.link_id, l.name 
    FROM table1 t
    join link l on t.link_id = l.id;
    Ответ написан
    Комментировать
  • Выбрать по условию, а то что не найдено указать как ноль?

    @baitarakhov
    https://www.db-fiddle.com/f/emqonUSGZKx36N7jNVN1Ew/2
    select c.color_id, c.color_name,
           count(p.product_id) as total,
           count(case when c.color_name = 'red' then 1 end) as red_cnt
    from color as c
             left join product as p on c.color_id = p.color_id
    group by c.color_id, c.color_name;
    Ответ написан
    1 комментарий
  • Правильно ли построена структура бд?

    @baitarakhov
    Первый вариант с отдельной колонкой для каждой page - это не правильно, будет правильнее запись для каждой страницы хранить в отдельной таблице, например в структуре:
    id integer, -- primary key для page
    comics_id integer, -- foreign key для comics
    page_order integer, -- порядок для page
    page varchar(255) -- значение для page


    Далее для того, что бы для каждой comics_id не было дублированных page_order - устанавливаешь ограничение уникальности для полей comics_id, page_order. Это всего лишь пример, возможно у вас будет лучшее решение.

    Самое простое, возьмите ваши предполагаемые структуры данных и напишите SQL выборки для возвращения необходимых вам данных, в итоге выберите тот вариант, где SQL выражение получиться простым без сложных соединений и под-запросов с агрегацией.

    Также обратите внимание, где проще всего возможно будет контролировать уникальность данных средствами БД (constraints), что бы потом вам не пришлось разбираться с дублированными записями в таблицах.
    Ответ написан
  • Как переделать коррелированный вложенный подзапрос в некоррелированный?

    @baitarakhov
    Для того, что бы можно сделать анализ, создай схему с нужным СУБД на сайте sqlfiddle.com и вышли линк на свою схему, далее посмотрим. По предварительному анализу, вижу что в вопрос в категорий MYSQL, так как я не работал с данным СУБД, то постараюсь написать выборку на простом SQL и что то на подобие MYSQL.

    1) Простой и читабельный вариант:
    select  t.*
     from fitness.pair_sports t
     where exists 
     (
     select t2.fio 
     from fitness.pair_sports t2
       where t2.fio = t.fio
     group by t2.fio
       having count(*) > 1
     );


    2) Какой то мутный вариант, возможно сработает
    select * from
    (
    select  @rownum:= case when t.fio <> @name then 0 else 1 end as rn,
            @name:=t.fio as name,
            t.*
     fitness.pair_sports t
    order by t.fio
    ) tt
    where tt.rn = 1;
    Ответ написан
    Комментировать