SELECT MySQL View содержит подзапрос в предложении FROM ... помочь переписать?

0

Я создаю веб-приложение, которое должно ссылаться на данные из одного представления.

Я знаю, что я не могу иметь предложение from в подзапросе в представлении создания или замены, но мне удалось найти только одну версию этого запроса, которая возвращает нужный мне результат.

После нескольких часов траления через посты здесь я не мог придумать никаких решений для этого. Есть ли кто-то с большим количеством смартфонов, чем у меня, который может повторно подделать этот запрос таким образом, чтобы все данные могли быть возвращены в одном представлении? Вот запрос...

CREATE
OR REPLACE VIEW in_stock_levels AS
SELECT
  *,
  'in_stock' - 'maximum_stock' AS levels
FROM(
    SELECT
      stock_levels.id AS id,
      stock_levels.part_number AS part_number,
      stock_levels.minimum_stock AS minimum_stock,
      stock_levels.maximum_stock AS maximum_stock,
      (
        SELECT
          COUNT(*)
        FROM
          automatic_transmission_jobs
        WHERE
          part_number = stock_levels.part_number
          AND test_result != "Not Tested"
          AND status != "pwa"
      ) AS in_stock
    FROM
      stock_levels
  ) AS check_stock

Буду признателен за любую оказанную помощь.

  • 0
    Вы пытались использовать JOIN из двух исходных таблиц для создания своего VIEW вместо подзапросов?
Теги:

2 ответа

0

Выполнение этого так работает, я знаю, что это не самый эффективный,

CREATE
OR REPLACE VIEW in_stock_levels AS
SELECT
      stock_levels.id AS id,
      stock_levels.part_number AS part_number,
      stock_levels.minimum_stock AS minimum_stock,
      stock_levels.maximum_stock AS maximum_stock,
      (
        SELECT
          COUNT(*)
        FROM
          automatic_transmission_jobs
        WHERE
          part_number = stock_levels.part_number
          AND test_result != "Not Tested"
          AND status != "pwa"
      ) AS in_stock,
      (
        SELECT
          COUNT(*)
        FROM
          automatic_transmission_jobs
        WHERE
          part_number = stock_levels.part_number
          AND test_result != "Not Tested"
          AND status != "pwa"
      ) - stock_levels.maximum_stock AS stock_level
    FROM
      stock_levels
 

Спасибо за вашу помощь Инго :)

0

Не имея дополнительной информации о вашей схеме, но исходя из того, что вы опубликовали, следующий запрос должен работать для вашего CREATE ИЛИ REPLACE VIEW...

SELECT
    stock_levels.id,
    stock_levels.part_number,
    stock_levels.minimum_stock,
    stock_levels.maximum_stock,
    COUNT(automatic_transmission_jobs.id) AS in_stock,
    in_stock - maximum_stock AS levels
FROM stock_levels
LEFT OUTER JOIN automatic_transmission_jobs USING (part_number)
WHERE
    automatic_trasmission_jobs.test_result != 'Not Tested'
    AND automatic_trasmission_jobs.status !='pwa'
GROUP BY stock_levels.id;

Используете ли вы phpMyAdmin или MySQLWorkbench для разработки и тестирования ваших запросов?

  • 0
    Спасибо, я попробую, я использую phpMyAdmin на самом медленном сервере в мире на данный момент.
  • 0
    Я просто собираюсь попробовать, я только что вернулся на сайт сегодня. Я опубликую результат :)
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню