Sql 如果满足条件,则列中列出条件
我每天早上都会收到一个文件,其中包含不符合特定标准的客户信息的详细信息。我已经建立了一个脚本,其中包含许多条件,如果满足这些条件,将显示客户信息并将其放入文件中,但我很难找出他们错误的原因 我在where子句中有很多条件,有没有办法显示哪一列的信息不正确 例如,我可以有这样一个表:Sql 如果满足条件,则列中列出条件,sql,tsql,Sql,Tsql,我每天早上都会收到一个文件,其中包含不符合特定标准的客户信息的详细信息。我已经建立了一个脚本,其中包含许多条件,如果满足这些条件,将显示客户信息并将其放入文件中,但我很难找出他们错误的原因 我在where子句中有很多条件,有没有办法显示哪一列的信息不正确 例如,我可以有这样一个表: NAME|ADDRESS |PHONE|COUNTRY John|123avenue |12345|UK 我的情况可能是 SELECT * FROM CUSTOMERS WHERE NAME LIKE 'J%
NAME|ADDRESS |PHONE|COUNTRY
John|123avenue |12345|UK
我的情况可能是
SELECT * FROM CUSTOMERS
WHERE NAME LIKE 'J%'
AND LEFT(PHONE,1) = '1'
当两个条件都满足时,它会显示在文件中,但由于我有80多行和40个条件,很难查看每一行并找出其原因
有什么方法可以添加一列来告诉我在哪里满足了条件吗?如前所述,没有。你应该颠倒你的逻辑。添加显示错误的字段,然后在
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
标记您正在使用的DBMS(SQL Server、MySQL、PostgreSQL等)。@Valerica UpdateTracle不使用TSQL,它使用PL/SQL@MatBailie我想知道,对于TSQL和Oracle,Oracle没有
left()
,因此我假设这是SQL Server。如果是Oracle,则需要选择customer.*,…
,因为它将出现错误,出现不固定的*,
。但是left()。我将把它作为作业的练习;)