如何从不同的表中选择同时具有元素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';
为什么此代码仅选择具有类型动作和策略的游戏?我该如何解决?
答案 0 :(得分:0)
首先,忘记natural join
。这是一种憎恶,因为它没有使用正确声明的外键关系。它只使用具有相同名称的列(对于我创建的表没用,因为几乎所有表都有CreatedAt
和CreatedBy
列。使用非特定名称是危险的;当出现问题时,你并不明显。使用join
或on
列出用于using
的列。
其次,您的查询会过滤掉所有行,因为genre
不能同时拥有两个值。
第三,您可以使用group by
和having
执行所需操作。假设没有重复:
SELECT gameid
FROM games g INNER JOIN
gamegenre gg
ON (gameid)
WHERE gg.genre IN ('Action', 'Strategy')
GROUP BY gameid
HAVING COUNT(*) = 2;