【问题标题】:how can I select multiple values from a inner join query with sql?如何使用 sql 从内部连接查询中选择多个值?
【发布时间】:2018-03-24 23:46:14
【问题描述】:

我想进行查询以根据 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 来在一个查询中获得多个结果。即为特定组中的用户返回多个用户电子邮件。这可能吗?

【问题讨论】:

  • 请给出样本数据和预期结果
  • 样本数据是一个group_id和一个user_id数组,结果是user_email数组
  • 给我们表users和users_to_groups的5行数据。那么这些样本数据的结果是什么。
  • 是的,使用 IN() 函数指定users_to_groups.user_ids 的列表

标签: mysql sql database inner-join


【解决方案1】:

在爆破一组占位符? 后,考虑使用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)

【讨论】:

    猜你喜欢
    • 2020-10-25
    • 1970-01-01
    • 2013-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-13
    • 1970-01-01
    相关资源
    最近更新 更多