0

トレーニング演習として、League of Legends に似た架空の SQLite データベースに取り組んでいます。左外部結合を実行して、すべてのプレーヤーのテーブルを取得し、呼び出されていないスキンがある場合は'Classic'それらも返す必要があります。

現在、次のクエリがあります。

SELECT * FROM players
        LEFT OUTER JOIN (SELECT * FROM playerchampions WHERE NOT championskin = 'Classic')
            ON name = playername

これは、私が探しているものを返しますが、不要な列もたくさん返します (プレーヤーの経験、プレーヤーの IP、プレーヤーの RP、テーブル内のプレーヤーplayerchampions名)。2 つのテーブルのコードは次のとおりです。

CREATE TABLE players ( 
    name       TEXT    PRIMARY KEY,
    experience INTEGER,
    currencyip INTEGER,
    currencyrp INTEGER 
);
CREATE TABLE playerchampions ( 
    playername   TEXT REFERENCES players ( name ) ON UPDATE CASCADE,
    championname TEXT REFERENCES champions ( name ) ON UPDATE CASCADE,
    championskin TEXT REFERENCES skins ( skinname ) ON UPDATE CASCADE,
    PRIMARY KEY ( playername, championname, championskin ) 
);

前述のとおり、クエリは実行されますが、返されたときに playerchampions 列に適切なテーブル名が指定されていないため、SELECT の player.name、playerchampions.championname、playerchampions.championskin を使用できません。

これを修正するにはどうすればよいですか?

4

2 に答える 2

0

エイリアスを使用してみてください:

SELECT p.name, c.championskin FROM players p LEFT OUTER JOIN (SELECT pc.playername playername, pc.championskin championskin FROM playerchampions pc WHERE NOT pc.championskin = 'Classic') c ON p.name = c.playername;

それがまさにあなたが必要としているものかどうかはわかりませんが、それはあなたを近づけます...

于 2013-04-10T10:50:13.560 に答える
0
SELECT * FROM players p LEFT OUTER JOIN playerchampions pc ON (p.name = pc.playername)     WHERE NOT pc.championskin = 'Classic'
于 2013-04-10T10:51:02.227 に答える