두 개의 테이블, 상태 및 항목이 있습니다. 하위 하위 선택 및 그룹화 : 그룹의 최대 값을 포함하는 행에서 이름 열 가져 오기
States
+----+------+-------+----------+
| id | name | state | priority |
+----+------+-------+----------+
| 1 | AA | 10 | 1 |
| 2 | AB | 10 | 2 |
| 3 | AC | 10 | 3 |
| 4 | BA | 20 | 1 |
| 5 | BB | 20 | 5 |
| 6 | BC | 20 | 10 |
| 7 | BD | 20 | 50 |
+----+------+-------+----------+
Items
:
+----+--------+-------+
| id | item | state |
+----+--------+-------+
| 1 | Blue | 10 |
| 2 | Red | 20 |
| 3 | Green | 20 |
| 4 | Yellow | 10 |
| 5 | Brown | 10 |
+----+--------+-------+
priority
열은 Items
표에 사용되지 않지만 다음과 같이 원하는 데이터를 점점 복잡하게한다.
는 내가 원하는 것은 가장 높은 우선 순위state
의 name
각 행의 state.id
값을 대체하는 Items
테이블의 행의 목록입니다.
결과는 같을 것이다 :
+----+--------+-------+
| id | item | state |
+----+--------+-------+
| 1 | Blue | AC |
| 2 | Red | BD |
| 3 | Green | BD |
| 4 | Yellow | AC |
| 5 | Brown | AC |
+----+--------+-------+
는 여기에 내가 함께 왔어요 작은 괴물. 이것이 최선의 방법입니까, 아니면 더 효율적입니까/덜 장황 할 수 있습니까? (하위 하위 선택 내 손바닥 가려움을 - P.)
SELECT *
FROM
Items AS itm
INNER JOIN (SELECT sta.name, sta.state
FROM (SELECT state, MAX(priority) [highest]
FROM States
GROUP BY state) AS pri
INNER JOIN States AS sta
ON sta.state = pri.state
AND sta.priority = pri.highest) AS nam
ON item.state = name.state
업데이트 : 나는
'Item.state'는 예제 데이터의 'stetes.id'에 대한 외래 키가 아닙니다. – Laurence
@Laurence : 잘 잡으세요. 업데이트 됨. 감사! – Lemur