postgresql Postgres从另一个选择中基于true条件进行选择

uqxowvwt  于 2023-11-18  发布在  PostgreSQL
关注(0)|答案(2)|浏览(132)

我对postgres有点陌生,对SQL很生疏。
我有一个带有password_hash列的users表,它通过pgcrypto存储哈希密码。

id  |    name    |      email      |           password_hash            |
----+------------+-----------------+------------------------------------+
  1 | john doe   | [email protected]| $1$47i7aL0t$bUUZWSNhu.KBuFBlwYN3x1 |

字符串
通过此选择可以确定用户的密码是否有效:

SELECT password_hash = crypt('password123', password_hash) FROM users where email='[email protected]';


这将返回tf,具体取决于密码是否匹配。
作为授权逻辑的一部分,如果密码有效,我需要返回用户的行,但我希望在单个查询中实现这一点,而不是首先对password_hash执行SELECT,然后再执行另一个SELECT来检索用户的行。

crcmnpdw

crcmnpdw1#

您可以将密码检查向下移动到WHERE部分,然后确保电子邮件AND密码正确:

SELECT users.* FROM users
WHERE password_hash=crypt('pass123',password_hash) 
AND email='[email protected]';

字符串

k75qkfdt

k75qkfdt2#

您可以:

SELECT
  u.*, 
  password_hash = crypt('password123', password_hash) as valid
FROM users u
WHERE email='[email protected]';

字符串

相关问题