2013-04-10 49 views
0

作为一项训练练习,我正在研究一个类似于英雄联盟的虚构SQLite数据库,并且我需要执行左外连接以获取所有玩家的表格,并且如果他们的皮肤不是称为'Classic',也归还这些。SQLite外连接列过滤

我现在有这个疑问:

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

它返回我所寻找的,但也有很多我不希望列(玩家体验,玩家IP,玩家RP的,playername在playerchampions 。表两个表的代码如下:

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) 
); 

正如我所说的,执行查询,但我不能使用SELECT players.name,playerchampions.championname,playerchampions.championskin作为playerchampions列没有给出他们适当的表名whe n返回。

我该如何解决这个问题?

回答

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; 

不知道如果它正是你需要的,但它让你更接近...

+0

谢谢,这是招的确,刚需Ç .championname too – Wolf 2013-04-10 10:59:53

+0

很高兴我可以帮助:) – BobTheBuilder 2013-04-10 11:02:11

0
SELECT * FROM players p LEFT OUTER JOIN playerchampions pc ON (p.name = pc.playername)  WHERE NOT pc.championskin = 'Classic' 
+0

用SELECT p.name,pc.championname,pc.championskin替代SELECT *为我做了。非常感谢! – Wolf 2013-04-10 10:58:24