#mysql #sql
#mysql #sql
Вопрос:
Учитывая базу данных…..
ID Name item_order Manager
1 ted 2 N
2 bob 5 N
3 tony 1 Y
4 fred 3 N
5 william 4 N
6 george 6 Y
7 cade 8 N
8 matt 7 N
Я хотел бы иметь возможность выбирать идентификатор менеджеров перед текущим именем, не относящимся к менеджерам. Так, например, результатом для bob будет tony или 3.
Я могу выяснить, как это сделать с помощью двух запросов
SELECT MAX( item_order) AS parent
FROM tablename WHERE item_order < 5 amp;amp; Manager = 'Y'
В результате этого я бы сделал другой выбор с помощью item_order. Есть ли способ сделать все это за один выбор?
Комментарии:
1. не могли бы вы, пожалуйста, объяснить более четко?? какое точное соотношение между
ID
иitem_order
?? напишите желаемый результат
Ответ №1:
SELECT * FROM tablename
WHERE Manager = 'Y'
AND item_order = (SELECT MAX(item_order) AS parent
FROM tablename
WHERE item_order < 5
AND Manager = 'Y') AS t
Ответ №2:
SELECT
n.*,
ManagerName = m.Name
FROM tablename n
LEFT JOIN tablename m ON m.Manager = 'Y' AND n.item_order > m.item_order
LEFT JOIN tablename m2 ON m2.Manager = 'Y'
AND m2.item_order < n.item_order AND m2.item_order > m.Item_order
WHERE n.Manager = 'N'
AND m2.ID IS NULL
Это даст вам список всех не-менеджеров вместе с именами тех менеджеров, которые непосредственно предшествуют им (на основе item_order
).
Если вы хотите вернуть только одну строку для определенного не-менеджера, добавьте еще одно условие, подобное этому:
AND n.Name = 'bob'