문제

나는 조금 새롭다 sqlite, 그리고 데이터베이스 디자인에 대해 약간의 딜레마가 있습니다. 설명하겠습니다. 당신과 당신의 친구들이 인터넷에서 여러 가지 닉네임을 사용한다고 가정 해 봅시다 (1 인당 하나 이상이 될 수 있음). 우리가 여기있는 것은 사람의 신분증 과이 사람이 사용하는 모든 닉네임 목록입니다. 이것은 큰 목록의 단일 항목입니다. 여기서 목표는 SELECT 문을 사용하여 지정된 별명을 포함하는 모든 항목을 가져 오는 데 SQLITE를 사용 하여이 데이터를 저장하는 것입니다.

나는 두 개의 열이있는 테이블을 만드는 것에 대해 생각했는데, 먼저 ID (기본 키)이고 다른 하나는 닉네임을 CSV 체재. 그러나이 예에서는 CSV에 저장된 닉네임을 검색하고 일치시키기 위해 Select 문을 작성하는 방법을 모르겠습니다.

아이디어?

도움이 되었습니까?

해결책

우선, 여기에 당신이 가진 것이 있습니다

SELECT Name, Nickname FROM MyTable WHERE Nickname = 'Copper';

그러나 나는 이름에 대한 테이블과 사용 된 닉네임에 대한 테이블이있는 것을 강력히 제안합니다.

CREATE TABLE Users (
    UserId INTEGER PRIMARY KEY, 
    Name TEXT
    );
CREATE TABLE Nicknames (
    NickNameId INTEGER PRIMARY KEY, 
    UserId INTEGER REFERENCES Users(UserId), 
    NickName Text
    );

이 체계는 항목을 편집하고 제거 할 수있는 더 많은 제어 기능을 제공합니다.

어느 쪽이든 쿼리하십시오 INNER JOIN:

SELECT Users.Name, NickNames.NickName 
    FROM Users INNER JOIN NickNames ON User.UserId=NickNames.UserId
    WHERE NickNames.NickName = 'Copper';

또는 중첩 쿼리 :

SELECT Users.Name
    FROM Users
    WHERE User.UserId IN (
    SELECT NickNames.UserId 
        FROM NickNames 
        WHERE NickNames.NickName = 'Copper');

두 사람은 (이 경우)와 동일합니다. WHERE 절. 그것 공장, 그러나 그것은 가난한 형태입니다 (그것은 명확하지 않습니다. INNER JOIN):

SELECT Users.Name, NickNames.NickName 
    FROM Users, NickNames 
    WHERE User.UserId = NickNames.UserId
    AND NickNames.NickName = 'Copper';

다른 팁

다음 테이블 만 가지고 있지 않겠습니까?

사람 (열 : person_id, person_name)

닉네임 (열 : nickname_id, 닉네임)

person_nickname (열 : person_id, nickname_id)

그런 다음 사람에서 person_nickname에서 닉네임에서 person_nickname까지 외국 키를 만듭니다. 이것은 주어진 사람이 원하는만큼의 닉네임을 가질 수있게합니다.

그런 다음 주어진 별명과 일치하는 모든 사람을 찾으려면 다음을 쓸 수 있습니다.

SELECT p.person_name
  FROM person.p
     , nickname n
     , person_nickname pn
 WHERE n.nickname = 'nickname of interest'
   AND p.person_id = pn.person_id 
   AND n.nickname_id = pn.nickname_id

2 개의 테이블이 필요합니다.

  • 사용자
  • 별명

표 "사용자"에는 사용자에 대한 ID, 이름, 기타 선택 정보가 있습니다. 표 "닉네임"에는 user_id, 닉네임이 있습니다.

그것은 하나에서 많은 암살입니다. 그런 다음 모든 사용자 닉네임의 목록을 얻으려면 다음과 같이 쿼리합니다 (사용자 ID 사용).

SELECT nicknames.nickname FROM nicknames WHERE nicknames.user_id=id

구현과 같은 덜 데이터베이스로서 다음을 수행 할 수 있습니다.
2 개의 필드 (사용자, 별명)가있는 테이블 하나만 사용하십시오. 그런 다음 다음과 같은 쿼리가있는 사용자와 관련된 모든 John의 닉네임 (ID를 사용할 수 있음) 목록을 얻을 수 있습니다.

SELECT table.nickname FROM table WHERE table.user="john"

CSV 접근 방식은 작동하지만 별명을 추가/제거/구문 분석하기 위해 자신의 기능을 구현해야하며, 내가 설명한 두 구현이 거의 느리게 진행됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top