运行 字段为空时的特定查询
Run particular query if field is null
所以我想 运行 根据一个字段是否为空进行不同的查询。这是我的
SELECT
CASE
WHEN vehicle_uid IS NULL THEN (SELECT lic_num, vehicle_make, vehicle_model, zone.name
FROM notice
INNER JOIN zone on notice.zone_uid = zone.uid
WHERE lic_num IN (
SELECT lic_num
FROM notice
GROUP BY lic_num
HAVING count(*) > 1
))
ELSE (SELECT lic_num, vehicle_uid, model.model, make.make, zone.name
FROM notice
INNER JOIN vehicle_model AS model ON notice.vehicle_uid = model.uid
INNER JOIN vehicle_make AS make ON model.vehicle_make_uid = make.uid
INNER JOIN zone on notice.zone_uid = zone.uid
WHERE lic_num IN (
SELECT lic_num
FROM notice
GROUP BY lic_num
HAVING count(*) > 1
))
END
我得到的错误是 #1054 - Unknown column 'vehicle_uid' in 'field list'
当我将 WHEN vehicle_uid IS NULL
更改为 WHEN notice.vehicle_uid IS NULL
时,错误显示:#1109 - Unknown table 'notice' in field list
我也试过了
SELECT
CASE vehicle_uid
WHEN IS NULL THEN ...
并出现以下错误:#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IS NULL THEN (SELECT lic_num, vehicle_make, vehicle_model, zone.name FROM n' at line 3
我刚开始使用更复杂的查询,不知道为什么会这样。
您的外部查询中缺少 FROM
子句。
您应该将 UNION 与 return 相同列的两个不同 SELECT 语句一起使用。
(SELECT lic_num, vehicle_make uid_or_make, vehicle_model, '', zone.name
FROM notice
INNER JOIN zone on notice.zone_uid = zone.uid
WHERE lic_num IN (SELECT lic_num FROM notice GROUP BY lic_num HAVING count(*) > 1) AND vehicle_uid IS NULL
)
UNION ALL
(SELECT lic_num, vehicle_uid uid_or_make, model.model vehicle_model, make.make, zone.name
FROM notice
INNER JOIN vehicle_model AS model ON notice.vehicle_uid = model.uid
INNER JOIN vehicle_make AS make ON model.vehicle_make_uid = make.uid
INNER JOIN zone on notice.zone_uid = zone.uid
WHERE lic_num IN (SELECT lic_num FROM notice GROUP BY lic_num HAVING count(*) > 1) AND vehicle_uid IS NOT NULL
)
您不能对 select
语句执行子查询 returns 多个字段,也不能返回多于一行。您看到的错误是因为您从无处选择了一个字段 vehicle_uid
,您没有 from
子句让数据库知道它来自哪里。
解决您的问题的最佳方法是根据特定条件执行 UNION
,但只有当两个查询具有相同的列集时它才会起作用,因此:
SELECT lic_num,
vehicle_make,
'' SUBSTITUTE_FORVEHICLEUID,
vehicle_model,
'' SUBSTITUTE_FOR_MAKE,
zone.name
FROM notice
INNER JOIN zone ON notice.zone_uid = zone.uid
WHERE lic_num IN (
SELECT lic_num
FROM notice
GROUP BY lic_num
HAVING count(*) > 1
)
AND vehicle_uid is null
UNION
SELECT lic_num,
'' SUBSTITUTE_FOR_VEHICLEMAKE,
vehicle_uid,
model.model,
make.make,
zone.name
FROM notice
INNER JOIN vehicle_model AS model ON notice.vehicle_uid = model.uid
INNER JOIN vehicle_make AS make ON model.vehicle_make_uid = make.uid
INNER JOIN zone on notice.zone_uid = zone.uid
WHERE lic_num IN (
SELECT lic_num
FROM notice
GROUP BY lic_num
HAVING count(*) > 1
)
AND vehicle_uid IS NOT NULL
即使这是解决您的问题的最佳选择,您也必须调整这两个查询。因为我不知道你的结构是我能提供的最好的。
所以我想 运行 根据一个字段是否为空进行不同的查询。这是我的
SELECT
CASE
WHEN vehicle_uid IS NULL THEN (SELECT lic_num, vehicle_make, vehicle_model, zone.name
FROM notice
INNER JOIN zone on notice.zone_uid = zone.uid
WHERE lic_num IN (
SELECT lic_num
FROM notice
GROUP BY lic_num
HAVING count(*) > 1
))
ELSE (SELECT lic_num, vehicle_uid, model.model, make.make, zone.name
FROM notice
INNER JOIN vehicle_model AS model ON notice.vehicle_uid = model.uid
INNER JOIN vehicle_make AS make ON model.vehicle_make_uid = make.uid
INNER JOIN zone on notice.zone_uid = zone.uid
WHERE lic_num IN (
SELECT lic_num
FROM notice
GROUP BY lic_num
HAVING count(*) > 1
))
END
我得到的错误是 #1054 - Unknown column 'vehicle_uid' in 'field list'
当我将 WHEN vehicle_uid IS NULL
更改为 WHEN notice.vehicle_uid IS NULL
时,错误显示:#1109 - Unknown table 'notice' in field list
我也试过了
SELECT
CASE vehicle_uid
WHEN IS NULL THEN ...
并出现以下错误:#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IS NULL THEN (SELECT lic_num, vehicle_make, vehicle_model, zone.name FROM n' at line 3
我刚开始使用更复杂的查询,不知道为什么会这样。
您的外部查询中缺少 FROM
子句。
您应该将 UNION 与 return 相同列的两个不同 SELECT 语句一起使用。
(SELECT lic_num, vehicle_make uid_or_make, vehicle_model, '', zone.name
FROM notice
INNER JOIN zone on notice.zone_uid = zone.uid
WHERE lic_num IN (SELECT lic_num FROM notice GROUP BY lic_num HAVING count(*) > 1) AND vehicle_uid IS NULL
)
UNION ALL
(SELECT lic_num, vehicle_uid uid_or_make, model.model vehicle_model, make.make, zone.name
FROM notice
INNER JOIN vehicle_model AS model ON notice.vehicle_uid = model.uid
INNER JOIN vehicle_make AS make ON model.vehicle_make_uid = make.uid
INNER JOIN zone on notice.zone_uid = zone.uid
WHERE lic_num IN (SELECT lic_num FROM notice GROUP BY lic_num HAVING count(*) > 1) AND vehicle_uid IS NOT NULL
)
您不能对 select
语句执行子查询 returns 多个字段,也不能返回多于一行。您看到的错误是因为您从无处选择了一个字段 vehicle_uid
,您没有 from
子句让数据库知道它来自哪里。
解决您的问题的最佳方法是根据特定条件执行 UNION
,但只有当两个查询具有相同的列集时它才会起作用,因此:
SELECT lic_num,
vehicle_make,
'' SUBSTITUTE_FORVEHICLEUID,
vehicle_model,
'' SUBSTITUTE_FOR_MAKE,
zone.name
FROM notice
INNER JOIN zone ON notice.zone_uid = zone.uid
WHERE lic_num IN (
SELECT lic_num
FROM notice
GROUP BY lic_num
HAVING count(*) > 1
)
AND vehicle_uid is null
UNION
SELECT lic_num,
'' SUBSTITUTE_FOR_VEHICLEMAKE,
vehicle_uid,
model.model,
make.make,
zone.name
FROM notice
INNER JOIN vehicle_model AS model ON notice.vehicle_uid = model.uid
INNER JOIN vehicle_make AS make ON model.vehicle_make_uid = make.uid
INNER JOIN zone on notice.zone_uid = zone.uid
WHERE lic_num IN (
SELECT lic_num
FROM notice
GROUP BY lic_num
HAVING count(*) > 1
)
AND vehicle_uid IS NOT NULL
即使这是解决您的问题的最佳选择,您也必须调整这两个查询。因为我不知道你的结构是我能提供的最好的。