복붙노트

[SQL] 내가 필요로 할 종류의 무엇에 합류?

SQL

내가 필요로 할 종류의 무엇에 합류?

나는 표 테이블이 :

 votes
-----------------
 userid   gameid
-------  --------
   a        1
   a        2
   a        3
   b        1
   b        2

그리고 게임 테이블 :

 games
----------------
 gameid   title
 ------   ------
    1       foo
    2       bar
    3       fizz
    4       buzz

"[A가 게임에 투표 사용자] 여기서 게임에서 선택 *"나는 쿼리를 수행하기 위해 현물 어떤 조인을 사용 것인가?

나는 제프 설명서 다음 시도했다, 그러나 나는 예상 결과를받지 못했습니다.

해결법

  1. ==============================

    1.당신은 INNER는 일반적인 게임 ID 필드 사이의 관계를 설정하는 조인을 사용 것;

    당신은 INNER는 일반적인 게임 ID 필드 사이의 관계를 설정하는 조인을 사용 것;

    select
      votes.userid,
      games.title
    from games
      inner join votes on (votes.gameid = game.gameid)
    where
      votes.userid = 'a'
    
  2. ==============================

    2.이것은 당신에게 투표와 게임을 가져옵니다

    이것은 당신에게 투표와 게임을 가져옵니다

    SELECT
       g.title
       v.userid
    FROM
       games g
    
       INNER JOIN votes v
       ON g.gameid = v.gameid
    

    이 투표하지 경우에도 모든 게임을 가져옵니다

    SELECT
       g.title
       v.userid
    FROM
       games g
    
       LEFT JOIN votes v
       ON g.gameid = v.gameid
    
  3. ==============================

    3.당신이 필요로하는 관계 연산자는 세 L 조인된다.

    당신이 필요로하는 관계 연산자는 세 L 조인된다.

    대부분의 SQL 제품은 명시 적 세 L 조인 연산자 또는 키워드 부족하다. 표준 SQL-92은 MATCH (하위 쿼리) 조건을 가지고 있지만 널리 (진정 관계형 언어 튜토리얼 D 키워드에게 그 세 L 조인 연산자에 대한 일치를 사용) 구현되지 않습니다.

    물론 세 L 조인 캔 다른 SQL 술어를 사용하여 작성 될 수있다. 가장 일반적으로 볼 사용은 EXISTS 또는 IN (하위 쿼리).

    데이터에 따라서는 SELECT DISTINCT..INNER이 조인을 사용하는 것이 가능하다. 그러나 귀하의 경우 경우 (게임 ID에 대한 중복 컬럼과 함께 열 목록에 추가되고 사용자 ID의 결과로 표 테이블을 통해 투사됩니다 당신이 FROM ... SELECT *를 사용하고 내부 조인 선택 지원을 당신의 SQL 제품, NATURAL JOIN을 사용) 중복 열 문제를 해결하고 당신이 너무 ON 절을 생략 할 것이라는 점을 의미 할 것입니다.

    당신의 SQL 제품 지원을하고 다시 데이터 (특히, 두 테이블의 제목이 동일한 경우)>에 따라 경우 INTERSECT를 사용하면 다른 가능한 방법입니다

    개인적으로, 나는이 조항은 작성된 코드에 더 가깝게 조인 때문에 세 L 조인하고, 예를 들어 조인 된 테이블을 통해 투사 발생하지 않습니다에 대한 SQL에서 사용하기 위해 존재 선호

    SELECT *
      FROM games
     WHERE EXISTS (
                   SELECT * 
                     FROM votes AS v
                    WHERE v.gameid = games.gameid
                          AND v.userid = 'a'
                  );
    
  4. ==============================

    4.,처럼 제한적인 설명을 제공 같은데, 다음은 당신에게 사용자 A가 게임에 투표 게임의 목록을 얻을 것이다 :

    ,처럼 제한적인 설명을 제공 같은데, 다음은 당신에게 사용자 A가 게임에 투표 게임의 목록을 얻을 것이다 :

    select g.gameid, g.title
    from games g
    inner join votes v
    on v.gameid = g.gameid
    where v.userid = 'a'
    
  5. from https://stackoverflow.com/questions/7033748/what-kind-of-join-do-i-need by cc-by-sa and MIT license