Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
192 views
in Technique[技术] by (71.8m points)

sql - Query with double joins

My entities are: Characters - Stats - Cards

The relationship between then is simple:

Characters have one-to-one for Stats

Characters have one-to-many for Cards

The expected query result is :

card.id, character.name, characters.thumbnail, characters.type, stats.overall

P.S: Cards and Stats have not direct relation, but Characters have a stat_id column

Resuming

How it's possible to in a single query achieve the expected result?

My attempts:

SELECT 
    cards.id, characters.thumbnail, characters.type, characters.name
FROM 
    cards
INNER JOIN 
    characters 
ON cards.character_id=characters.id

Result

cards.id, characters.thumbnail, characters.type, characters.name

Attempt to get stats.overall:

SELECT 
    cards.id, characters.thumbnail, characters.type, characters.name, stats.overall
FROM 
    cards, characters
INNER JOIN 
    characters 
ON cards.character_id=characters.id
INNER JOIN 
    stats 
ON characters.stat_id=stats.id

Result

error: table name "characters" specified more than once

question from:https://stackoverflow.com/questions/65602938/query-with-double-joins

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

you are joining twice to characters table , please avoid using implicit joins ( using , to join tables ) , always use explicit join :

SELECT
    cards.id
    , characters.thumbnail
    , characters.type
    , characters.name
    , stats.overall
FROM
    cards
    INNER JOIN characters
        ON cards.character_id = characters.id
    INNER JOIN stats
        ON characters.stat_id = stats.id

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...