sql - LEFT OUTER JOIN 丢失原始用户 ID

标签 sql postgresql join heroku pg

加深我的 PostgreSQL 知识。这是一个有效的查询:

SELECT * 
FROM associates a 
    LEFT OUTER JOIN ip b 
         ON a.userID = b.userID AND b.iPAddress = '124.xxx.xxx.xxx' 
    LEFT OUTER JOIN browser c 
         ON a.userID = c.userID AND c.userAgent = 'Mozilla / whatever Gecko' 
    LEFT OUTER JOIN location d 
         ON a.userID = d.userID AND d.country = 'US' 
    LEFT OUTER JOIN session e 
         ON a.userID = e.userID AND e.lastAction >= now() - interval '24 hours' 
WHERE a.extensionID = 'xxxxx' 
LIMIT 1

运行它,假设满足所有条件,返回一个很好的散列,它以 {'userid' => 12345, ... } 开头,我可能想稍后使用它(例如,如果 session 已过期,我将需要它来创建一个新 session )

但是,如果出现任何不匹配——例如——如果调用用户的 IP 发生更改——将导致相同的散列但丢失数据,更重要的是,散列将以 {'userid' =>无

说的userID明明是用来匹配其他表的,为什么会丢失,更重要的是如何保存?

这有点道理:如果不匹配,则没有任何内容被“选中”。有没有办法以某种方式保留原始的 a.userID

我应该提到我正在使用 Heroku 的 PostgreSQL via pg gem .

最佳答案

永远不要在生产代码中使用 *,它很容易出错。 userid 列存在于所有表中,但您需要哪一个?只需提及您真正需要的列,并在需要时使用别名。

关于sql - LEFT OUTER JOIN 丢失原始用户 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17877927/

相关文章:

mysql - 在SQL中找到一个变量的最小值和其他变量的匹配值

sql - 使用 PostgreSQL 批量验证电话号码

sql - 如何统计组数?

mysql - 连接具有多个日期的多个表

mysql - 获取所有值内连接 MYSQL

在查询中跨越多行的 SQL 字符串值

sql - SQL中的HAVING和WHERE之间的区别

sql - SSIS数据流源中的存储过程与直接SQL命令

java - 优化数据库使用

mysql - 在 MySQL 中使用 Case 加入 Group By 和 Order