За последние 24 часа нас посетили 21977 программистов и 1104 робота. Сейчас ищут 728 программистов ...

Запрос с непростым условием

Тема в разделе "MySQL", создана пользователем Exort, 10 фев 2019.

  1. Exort

    Exort Активный пользователь

    С нами с:
    30 апр 2016
    Сообщения:
    100
    Симпатии:
    2
    Доброго времени суток! За ранее спасибо за потраченное время.

    Суть:

    У меня есть две таблицы. Например, таблица с игроками и в этой таблице имеется колонка с id автомобиля. Если у игрока имеется автомобиль, то значение будет равно id автомобиля в таблице с автомобилеями, а если нет автомобиля, то стоит значение -1.
    Задача: Выбрать всех игроков у которых имеется автомобиль (player_car_id != -1), далее, выбрать автомобиль по этому ID из таблицы с автомобилями.

    Получается типо: SELECT `player_car_id` FROM `players` WHERE `player_car_id` != -1 ДАЛЕЕ SELECT * FROM `cars` where `car_id` = player_car_id ?


    JOIN / UNION?
     
  2. ElisDN

    ElisDN Активный пользователь

    С нами с:
    13 фев 2018
    Сообщения:
    605
    Симпатии:
    130
    Если нет автомобиля, то для этого придуман NULL, а не -1

    SELECT * FROM players p INNER JOIN cars c ON p.player_car_id = c.car_id
     
    Exort нравится это.
  3. Exort

    Exort Активный пользователь

    С нами с:
    30 апр 2016
    Сообщения:
    100
    Симпатии:
    2
    Большое спасибо за ответ. В текущих условиях, к сожалению, -1. )
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    попробую на пальцах объяснить неформально:
    JOIN используют тогда, когда в каждой строке результата нужны данные из объединяемых таблиц. неформально можно сказать, что это "объединение колонок"
    UNION добавляет к строкам одной выборки строки из другой выборки. неформально можно сказать, что это "объединение строк" ))) необходимо чтобы набор колонок в выборках совпадал.

    в вашем случае конечно нужен join. то же самое можно сделать и так
    Код (Text):
    1. SELECT p.player_car_id, c.*
    2. FROM players p, cars c
    3. WHERE p.player_car_id = c.car_id
    фактически это тот же inner join только без использования служебного слова join.

    https://dev.mysql.com/doc/refman/8.0/en/join.html
    https://dev.mysql.com/doc/refman/8.0/en/union.html