[SQL] (WHERE) 조건으로 선택된 행에서 이전 및 다음 행을 가져옵니다
SQL(WHERE) 조건으로 선택된 행에서 이전 및 다음 행을 가져옵니다
예를 들어 나는이 문이 :
my name is Joseph and my father's name is Brian
이 문은이 테이블처럼 말씀으로 갈라진다 :
------------------------------
| ID | word |
------------------------------
| 1 | my |
| 2 | name |
| 3 | is |
| 4 | Joseph |
| 5 | and |
| 6 | my |
| 7 | father's |
| 8 | name |
| 9 | is |
| 10 | Brian |
------------------------------
나는 각 단어의 이전 및 다음 단어를 얻으려면
예를 들어 내가 "이름"의 이전 및 다음 단어를 얻으려면 :
--------------------------
| my | name | is |
--------------------------
| father's | name | is |
--------------------------
어떻게 이런 결과를 얻을 수 있을까?
해결법
-
==============================
1.다음은 ANSI SQL 그래서 당신은 당신의 DBMS를 지정하지 않은 :
다음은 ANSI SQL 그래서 당신은 당신의 DBMS를 지정하지 않은 :
select prev_word, word, next_word from ( select id, lag(word) over (order by id) as prev_word, word, lead(word) over (order by id) as next_word from words ) as t where word = 'name';
SQLFiddle : http://sqlfiddle.com/#!12/7639e/1
-
==============================
2.왜 몸은 간단한 대답을하지 않았다?
왜 몸은 간단한 대답을하지 않았다?
SELECT LAG(word) OVER ( ORDER BY ID ) AS PreviousWord , word , LEAD(word) OVER ( ORDER BY ID ) AS NextWord FROM words;
-
==============================
3.서브 쿼리없이 :
서브 쿼리없이 :
SELECT a.word FROM my_table AS a JOIN my_table AS b ON b.word = 'name' AND abs(a.id - b.id) <= 1 ORDER BY a.id
-
==============================
4.사용은 SQL Server 2005의 플러스에 대한 예상 결과를 얻을에 가입하세요.
사용은 SQL Server 2005의 플러스에 대한 예상 결과를 얻을에 가입하세요.
create table words (id integer, word varchar(20)); insert into words values (1 ,'my'), (2 ,'name'), (3 ,'is'), (4 ,'joseph'), (5 ,'and'), (6 ,'my'), (7 ,'father'), (8 ,'name'), (9 ,'is'), (10,'brian'); SELECT A.Id , C.word AS PrevName , A.word AS CurName , B.word AS NxtName FROM words AS A LEFT JOIN words AS B ON A.Id = B.Id - 1 LEFT JOIN words AS C ON A.Id = C.Id + 1 WHERE A.Word = 'name'
결과:
피들러 데모
-
==============================
5.이 시도
이 시도
SELECT * FROM tablename a WHERE ID IN(SELECT ID - 1 FROM tablename WHERE word = 'name') -- will fetch previous rows of word `name` OR ID IN(SELECT ID + 1 FROM tablename WHERE word = 'name') -- will fetch next rows of word `name` OR word = 'name' -- to fetch the rows where word = `name`
-
==============================
6.당신은 선택이 빨리 되길 원한다면 여기에 다른 접근 방식이다. 그것은 준비 작업을 조금 걸립니다.
당신은 선택이 빨리 되길 원한다면 여기에 다른 접근 방식이다. 그것은 준비 작업을 조금 걸립니다.
그럼 그냥 문구를 선택합니다. 당신은 더 나은 속도를 얻을 수 있지만, 추가 저장 속도가 느린 삽입 어려워 유지 보수의 비용. 물론 기존 레코드에 대한 문구 열을 업데이트해야합니다,하지만 당신은 다른 답변에서 그렇게 할 수있는 SQL 있습니다.
-
==============================
7.나는 내 말을 컬럼에 인덱스를 생성하고 신속하게 결과를 얻을이 코드를 설정합니다
나는 내 말을 컬럼에 인덱스를 생성하고 신속하게 결과를 얻을이 코드를 설정합니다
WITH CTE AS (SELECT * FROM WordsTable WHERE word=N'Name') SELECT t2.word AS previousWord, t1.word, t3.word AS nextWord FROM WordsTable AS t2, CTE AS t1, WordsTable AS t3 WHERE (t2.ID + 1)= t1.ID AND (t3.ID - 1) = t1.ID
from https://stackoverflow.com/questions/27086377/get-previous-and-next-row-from-rows-selected-with-where-conditions by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 내가) (ContentResolver.query이 안드로이드 쿼리를 수행 할 수 있습니까? (LEFT는 가입 CASE) (0) | 2020.06.06 |
---|---|
[SQL] 번호 또는 간격 데이터 유형 - 오라클의 날짜를 빼면? (0) | 2020.06.06 |
[SQL] 어떻게 테이블 데이터를 반환, 자바 / JSP에서 MS SQL Server 저장 프로 시저를 실행합니까? (0) | 2020.06.06 |
[SQL] "NOT IN"사용하여 SQL 쿼리 LINQ (0) | 2020.06.06 |
[SQL] SQL 쿼리와 기능 결과 데이터에 대한 대상이 없습니다 (0) | 2020.06.06 |