我想了解下国际象棋和跳棋的玩家的身份

playerid   game         website
a1         chess        www.abc.com
a2         checkers     www.cba.com
a1         checkers     www.abc.com
b2         chess        www.abc.com
b1         chess        www.abc.com
a3         checkers     www.aaa.com
b2         checkers     www.abc.com

所需输出(应排除a3和b1)

a1
b2
select game, playerid, website
from player_db
where (game= 'chess' or game= 'checkers') and website='abc.com'
group by playerid ;

这是我的sql,但它似乎无法同时获得这两个游戏.它 Select 国际象棋或跳棋

推荐答案

使用OR时的问题是,也会发现每个条目只满足两个条件中的一个,但您只想得到满足这两个条件的条目.使用AND时的问题是(这个答案似乎又被删除了),因为游戏不能同时等于"象棋"和"棋子",所以你不会得到任何行.

SELECT DISTINCT playerid
FROM daily_player
WHERE playerid IN (SELECT playerid FROM daily_player WHERE game = 'chess')
AND playerid IN (SELECT playerid FROM daily_player WHERE game = 'checkers')
AND website='abc.com';

另一种方法是使用EXISTS:

SELECT DISTINCT playerid
FROM daily_player d1
WHERE EXISTS (SELECT 1 FROM daily_player WHERE game = 'chess' AND playerid = d1.playerid)
AND EXISTS (SELECT 1 FROM daily_player WHERE game = 'checkers' AND playerid = d1.playerid) 
AND website='abc.com'

请注意,只有使用DISTINCT,而不是 Select 游戏等不同的列时,才能达到"a1 b2"的预期结果.

SELECT DISTINCT playerid,game,website
FROM daily_player
WHERE playerid IN (SELECT playerid FROM daily_player WHERE game = 'chess')
AND playerid IN (SELECT playerid FROM daily_player WHERE game = 'checkers')
AND website='abc.com';

但是,您将不会得到所显示的结果,但在本例中是四行,而不是两行.如果您删除上面 Select 的游戏,您将再次获得两行,因为网站没有差异.

Mysql相关问答推荐

—符号在哪里条件""

拒绝非超级用户访问停靠的MariaDB(超级用户工作)

递归查询意外地为一个字段返回空值

从insert语句获取新生成的虚拟UUID

如何在 MySQL 中对同一个表的多个列进行 INNER JOIN

按相关表中的计数和特定值过滤

看不懂mysql自左连接查询

如何使用等于、喜欢和不等于在 json 字段上编写查询?

如何编写一个查询,计算表中每个日期的一个日期加上前 4 天的记录数?

有没有比使用 MySQL 计划事件更好的方法来更新我的数据库表中的列?

MySQL 根据另一列中的值更改空值

SQL从字典中的键获取值

如何将表的链接列转换为 SQL 中的行?

PHP PDO 与普通 mysql_connect

MySQL时区更改?

在 WHERE 子句中使用 CASE

重新加载 .env 变量而不重新启动服务器(Laravel 5,共享主机)

utf8mb4_unicode_ci 与 utf8mb4_bin

将 MySQL 数据库置于版本控制之下?

MySQL - 基于同一表中的行求和列值