我有一个条件,我想选择一个随机用户,根据他们是否符合以下三个条件之一:
如果他们匹配邮政编码
如果它们与城市名称匹配
如果它们与州名匹配
如果其中一个匹配,则返回随机选择的结果。
基本上是这样的(~伪代码):
SELECT * FROM user
INNER JOIN address ON address.id = user.address_id
WHERE address.zipcode = '00000' IF EXISTS ELSE (
WHERE address.province = 'State Name' IF EXISTS ELSE
(WHERE address.city = 'City Name')
)
ORDER BY RANDOM() LIMIT 1;
有什么好的方法可以做到这一点,或者把它分成三个独立的查询更容易吗?
最佳答案
如果我理解正确,你需要一个优先顺序,从邮政编码开始。如果是:
SELECT u.*
FROM user u INNER JOIN
address a
ON a.id = u.address_id
WHERE a.zipcode = '00000' OR
a.province = 'State Name' OR
a.city = 'City Name'
ORDER BY (a.zipcode = '00000')::INT DESC,
(a.province = 'State Name')::INT DESC,
(a.city = 'City Name')::INT DESC,
random();
LIMIT 1;
如果您只想让这三个选项中的任何一个匹配,并在其中进行随机选择,那么使用
ORDER BY random()
。关于sql - SQL:选择具有条件优先级的随机行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47552474/