我每天早上都收到一个文件,其中包含信息不符合特定条件的客户详细信息,我已经构建了一个包含许多WHERE条件的脚本,如果遇到这些条件,将向客户显示信息并将其放入文件中但是即时通讯无法找到 为什么 他们错了。
由于我在where子句中有很多条件,有没有办法显示哪个列有不正确的信息
例如,我可以有一个这样的表:
NAME|ADDRESS |PHONE|COUNTRY
John|123avenue |12345|UK
我的条件可能是
SELECT * FROM CUSTOMERS
WHERE NAME LIKE 'J%'
AND LEFT(PHONE,1) = '1'
因此它会在文件中显示满足两个条件,但由于我有超过80行和40个条件,因此很难查看每一行并找出其中的原因。
有没有办法可以添加一个列,告诉我哪个WHERE条件已经满足?
答案 0 :(得分:2)
如措辞,不。你应该改变你的逻辑。添加显示错误的字段,然后在WHERE
子句中使用这些字段。
SELECT
*,
CASE WHEN LEFT(phone, 1) = '1' THEN 1 ELSE 0 END AS phone_starts_with_1,
CASE WHEN LEFT(name, 1) = 'Z' THEN 1 ELSE 0 END AS name_starts_with_z
FROM
customers
WHERE
phone_starts_with_1 = 1
OR name_starts_with_z = 1
根据您使用的SQL方言,您可能需要嵌套此方法,以便在WHERE子句中使用它们之前解析新字段...
SELECT
*
FROM
(
SELECT
*,
CASE WHEN LEFT(phone, 1) = '1' THEN 1 ELSE 0 END AS phone_starts_with_1,
CASE WHEN LEFT(name, 1) = 'Z' THEN 1 ELSE 0 END AS name_starts_with_z
FROM
customers
)
checks
WHERE
phone_starts_with_1 = 1
OR name_starts_with_z = 1