2017-10-28 25 views
0

如何从不同的表中选择同时包含元素x和y的所有值。 可以说我想选择所有有动作和战略类型的游戏。在一张游戏桌上,我有gameid,gametitle,在其他gamegenre我有gameid,gamegenre。我通过gameid将它们连接在一起。SQL使用x任意y元素选择所有值

SELECT g.gameid, gg.genre 
FROM games g 
NATURAL JOIN gamegenre gg 
WHERE gg.genre = 'Action' 
And gg.genre = 'Strategy'; 

为什么这个代码只选择风格为动作和策略的游戏?我该如何解决它?

回答

0

首先忘记natural join。这是一种憎恶,因为它没有使用正确声明的外键关系。它只是使用具有相同名称的列(并且对于我创建的表无用,因为几乎我所有的表都有CreatedAtCreatedBy列)。使用非特定名称是危险的;当出现问题时,你并不明显。使用onusing列出用于join的列。

其次,您的查询将过滤掉所有行,因为genre不能同时具有两个值。

第三,你可以用group byhaving做你想做的。假设没有重复:

SELECT gameid 
FROM games g INNER JOIN 
    gamegenre gg 
    ON (gameid) 
WHERE gg.genre IN ('Action', 'Strategy') 
GROUP BY gameid 
HAVING COUNT(*) = 2; 
+0

很好,非常感谢你!是的,我在大多数情况下使用INNER JOIN只是在这里得到了一个小懒:D –

相关问题