mysql - 如何使用 sql 从内连接查询中选择多个值?

标签 mysql sql database inner-join

我想进行查询以根据 INNER JOIN 选择多个用户电子邮件。目前我可以使用以下方法获取一个值:

"SELECT user_email FROM users INNER JOIN users_to_groups ON users.user_id = users_to_groups.user_id WHERE users_to_groups.group_id = ? AND users_to_groups.user_id = ?";

我想要做的是查询相同的 group_id,但使用一组 users_to_goups_user_id,以便在一个查询中获取多个结果。即返回特定组中用户的多个用户电子邮件。这可能吗?

最佳答案

在内爆占位符数组 ? 后,考虑使用 IN() 子句进行参数化。下面假设使用 PHP 的 PDO。

$placemarkers = array_fill(0, count($user_id_array), "?");

$strSQL = "SELECT user_email FROM users u" .
          " INNER JOIN users_to_groups g ON u.user_id = g.user_id" .
          " WHERE g.group_id = ?" .
          "   AND g.user_id IN (" . implode(", ", $placemarkers) . ")";

$sth = $conn->prepare($strSQL);

$sth->bindParam(1, $group_id);    
for($i = 0; $i < count($user_id_array); $i++) {
   $sth->bindParam(i+2, $user_id_array[$i], PDO::PARAM_INT); 
}

$sth->execute();

与 Python MySQL DB-API 游标类似:

placemarkers = ['%s' for i in user_id_array]
params_list = [group_id] + user_id_array

strSQL = "SELECT user_email FROM users u" + \
         " INNER JOIN users_to_groups g ON u.user_id = g.user_id" + \
         " WHERE g.group_id = %s" + \
         "   AND g.user_id IN ({})".format(", ".join(placemarkers))

cur = conn.cursor()
res = cur.execute(strSQL, params_list)

关于mysql - 如何使用 sql 从内连接查询中选择多个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49471112/

相关文章:

php - 使用 $_FILES 更新图像时出错

mysql - 如何获取随机id

MySql 数据库查询用于从每个类别中随机选择?

mysql - 在 mysql 中显示非连接行的映射?

database - 连接超时已过期... [登录前] 初始化=211;握手=14787;

mysql - 棘手的数据库设计

php - 将 Unix 时间戳转换为 MySQL DATETIME

sql - 使用 SQL 查询确定可用磁盘大小

database - 通过一个流或同时通过多个服务器将数据发送到 hbase 哪个更好?

php - 变量在应该可见时未定义(已定义)