Как я могу выбрать только максимальный food_order_id? - PullRequest
0 голосов
/ 06 августа 2020

Как я могу выбрать только максимальный food_order_id?

SELECT
    o.food_order_id,
    fo.user_id,
    f.name,
    f.price,
    o.quantity,
    o.subtotal
FROM food_order fo
INNER JOIN order_item o ON fo.food_order_id = o.food_order_id
INNER JOIN food_item f ON o.food_id = f.food_id
WHERE fo.user_id = 12;

, если я хочу обновить или удалить информацию, выбранную из таблицы, как мне это сделать?

таблицы:

CREATE TABLE food_item (
    food_id SERIAL PRIMARY KEY,
    name TEXT,
    image TEXT,
    description TEXT,
    price INT
);
CREATE TABLE food_order (
    food_order_id SERIAL PRIMARY KEY,
    user_id INT REFERENCES users(user_id)
);
CREATE TABLE order_item (
    order_item_id SERIAL PRIMARY KEY,
    food_id INT REFERENCES food_item(food_id),
    food_order_id INT REFERENCES food_order(food_order_id),
    quantity INT,
    subtotal INT
);

1 Ответ

1 голос
/ 06 августа 2020

В Postgres 13 вы можете использовать FETCH FIRST WITH TIES:

SELECT o.food_order_id, fo.user_id, f.name, f.price, o.quantity, o.subtotal
FROM food_order fo JOIN
     order_item o
     ON fo.food_order_id = o.food_order_id JOIN
     food_item f 
     ON o.food_id = f.food_id
WHERE fo.user_id = 12
ORDER BY o.food_order_id DESC
FETCH FIRST 1 ROW WITH TIES;

В более старых версиях я бы рекомендовал:

SELECT *
FROM (SELECT o.food_order_id, fo.user_id, f.name, f.price, o.quantity, o.subtotal,
             RANK() OVER (ORDER BY o.food_order_id DESC) as seqnum
      FROM food_order fo JOIN
           order_item o
           ON fo.food_order_id = o.food_order_id JOIN
           food_item f 
           ON o.food_id = f.food_id
      WHERE fo.user_id = 12
     ) x
WHERE seqnum = 1;
...