数据库中按a列或b列选择的数据比较顺序是什么

zfciruhq  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(366)

我有一个查询,我需要取一行1)比较旧的电子邮件,如果没有找到然后2)比较电子邮件列。我需要确保第一次检查总是由一个旧的电子邮件,第二次检查是由新的电子邮件,如果旧的没有找到。
我知道我不能使用set,因为比较顺序不能保证。

SELECT * FROM champions WHERE (email IN ('old@example.com', 'new@example.com'))

以下代码能否满足我的需要:

SELECT * FROM champions WHERE (email = 'old@example.com' OR email = 'new@example.com')
ua4mk5z4

ua4mk5z41#

WHERE 子句逐行应用。一行的结果不知道另一行的结果。
你似乎描述的是“寻找电子邮件地址x,如果没有找到寻找电子邮件地址y”。
有几种方法可以做到这一点。例如,下面是你描述的一个非常直白的方法。。。

SELECT
  *
FROM
  champions
WHERE
  email = 'new@example.com'

UNION ALL

SELECT
  *
FROM
  champions
WHERE
  email = 'old@example.com'
  AND NOT EXISTS (SELECT * FROM champions WHERE email = 'new@example.com')

这和你描述的一模一样。查找电子邮件地址x。在电子邮件地址x不存在的情况下,也可以查找电子邮件地址y。
不过,这很冗长,你最后要检查 'X' 两次。。。最好是以一种更加固定的方式来思考。
查找电子邮件地址为x或y的记录
对它们进行排序,使电子邮件地址为x的记录排在第一位
只选第一条记录
例如。。。

SELECT
  *
FROM
  champions
WHERE
  email IN ('old@example.com', 'new@example.com')
ORDER BY
  CASE WHEN email = 'new@example.com' THEN 1 ELSE 2 END
LIMIT
  1

相关问题