SQL选择包含x any y elements

时间:2017-10-28 15:19:27

标签: sql

如何从不同的表中选择同时具有元素x和y的所有值。 让我们说我想选择所有具有动作和战略类型的游戏。在一个游戏桌上我有gameid,gametitle,在另一个游戏中我有gameid,gamegenre。我通过gameid将它们连接在一起。

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

为什么此代码仅选择具有类型动作和策略的游戏?我该如何解决?

1 个答案:

答案 0 :(得分:0)

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

其次,您的查询会过滤掉所有行,因为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;