Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте, есть такая проблема:
Предположим у нас есть 3 таблицы: Car(машина), Wheel(руль), Engine(двигатель), причем Car содержит WheelId и EngineId или может иметь их как null. Соответственно вопрос: как сделать так, чтобы если например мы могли получить данные о руле - мы их получали, если нет, то соответствующие колонки заполнялись нулями или вообще не выдавались в результате.
Заранее спасибо!
Неактивен
Здравствуйте.
Вы можете воспользоваться конструкцией ifnull или coalesce.
Чтобы вообще не выдавались в результате - как Вы себе это представляете?
Неактивен
Я понимаю что можно использовать ifnull, но как сделать так чтобы если id руля был нулем, чтобы все колонки связанные с ним были нулевыми.
deadka написал:
Чтобы вообще не выдавались в результате - как Вы себе это представляете?
Ну предположим у нас есть 5 столбцов в Car(включая все idшники) и по 4 в Wheel и Engine. И если idшник Wheel = null, то мы на выдаче получаем 9 столбцов (5 от Car и 4 от Engine). Но если вы подразумевали - как реализовать это, то понятия не имею
Я в sql еще совсем зеленый и не в курсе всей полноты функционала.
Неактивен
Средствами sql Вы можете получить таблицу только с фиксированным количеством столбцов - какие колонки укажете в select, такие и получите. Вы можете подвергать колонки всяческим преобразованиям типа ifnull - но количество останется. Однако ничто не мешает Вам во первых уже на клиенте отсортировать - во-вторых добавить в запросе условие, например, WHERE Wheel IS NOT NULL.
Если нужно в "менее общем виде" - приведите
структуру таблиц,
небольшой набор тестовых данных,
то, что получается сейчас в результате запроса,
то, что хочется получить в итоге.
Неактивен
Неактивен
Базовый запрос, который надо расширять в случае потребности:
SELECT
c.*, e.*,w.*
FROM
Cars c
JOIN Wheels w ON c.WheelId = w.id
JOIN Engines e ON c.EngineId = e.id
Этот запрос выдаст полную информацию из всех таблиц для тех машин, у которых "есть и двигатель и колеса", то есть задан WheelId и EngineId.
Если нужен расширенный вариант, то JOIN заменяется на LEFT JOIN, тогда в выборке будут все машины, даже те, у которых нет движка/колес, соответствующия поля будут NULL.
Дальше на уровне WHERE отфильтровываете нужные записи.
Неактивен
Спасибо!
Неактивен